Страницы

Поиск по вопросам

Показаны сообщения с ярлыком linq2xml. Показать все сообщения
Показаны сообщения с ярлыком linq2xml. Показать все сообщения

вторник, 25 февраля 2020 г.

Как проверить файл на то, что его содержимым является XML документ?

#c_sharp #wpf #xmlparser #linq2xml


У меня есть схема, при помощи которой я проверяю переданный документ на валидность.
Но если я передаю другой файл, текстовый или картинку, то программа загибается еще
на этапе открытия. Как вариант, можно открытие обернуть в Try..catch, но хотелось бы
узнать, есть ли иной способ?
    


Ответы

Ответ 1



Оборачивайте открытие в try/catch. Все стандатные способы работы с XML выбрасывают исключения при невалидности (в смысле well-formed) документа. Методов IsWellFormed нет. Единственное, что можно улучшить (если вы это еще не сделали) - использовать для валидации именно XmlReader c ValidationType = ValidationType.Schema - чтобы избежать потенциальных проблем с огромными документами, которые "биты" в самом конце.

воскресенье, 15 декабря 2019 г.

Символ двоеточия в string

#c_sharp #xml #строки #linq2xml


При работе с xml-файлами в C# потребовалось создать через linq2xml такой элемент:
xml:space="preserve"

Однако при попытке добавить его программно
new XAttribute("xml:space", "preserve")

Получаю такую ошибку: 

"Знак ":", шестнадцатеричное значение
0x3A, не может использоваться в
именах."

Как можно добавить string типа "x:y"?

Чуть более полный код:
xdoc.Element("root").Add(new XElement("data", new XAttribute("name", x.Key), new
XAttribute("xmlspace", "preserve"),new XElement("value", x.Value)));

// Надо xml:space

Если кто задается вопросом, "WTF is that?", отвечаю, это программное добавление локализационных
ресурсов Visual Studio. (Изначально взято через linq2xml из файла ресурсов Java в Dictionary
и потом конвертировано в файл ресурсов Visual Studio), и, да, я знаю толк в извращениях.    


Ответы

Ответ 1



А если так: XmlDocument.CreateElement("prefix", "name", "uri"); //для элементов new XAttribute(XNamespace.Xml + "space", "preserve"); //для атрибутов

воскресенье, 12 мая 2019 г.

Как проверить файл на то, что его содержимым является XML документ?

У меня есть схема, при помощи которой я проверяю переданный документ на валидность. Но если я передаю другой файл, текстовый или картинку, то программа загибается еще на этапе открытия. Как вариант, можно открытие обернуть в Try..catch, но хотелось бы узнать, есть ли иной способ?


Ответ

Оборачивайте открытие в try/catch
Все стандатные способы работы с XML выбрасывают исключения при невалидности (в смысле well-formed) документа. Методов IsWellFormed нет.
Единственное, что можно улучшить (если вы это еще не сделали) - использовать для валидации именно XmlReader c ValidationType = ValidationType.Schema - чтобы избежать потенциальных проблем с огромными документами, которые "биты" в самом конце.

среда, 24 октября 2018 г.

Символ двоеточия в string

При работе с xml-файлами в C# потребовалось создать через linq2xml такой элемент: xml:space="preserve" Однако при попытке добавить его программно new XAttribute("xml:space", "preserve") Получаю такую ошибку: "Знак ":", шестнадцатеричное значение 0x3A, не может использоваться в именах." Как можно добавить string типа "x:y"? Чуть более полный код: xdoc.Element("root").Add(new XElement("data", new XAttribute("name", x.Key), new XAttribute("xmlspace", "preserve"),new XElement("value", x.Value)));
// Надо xml:space Если кто задается вопросом, "WTF is that?", отвечаю, это программное добавление локализационных ресурсов Visual Studio. (Изначально взято через linq2xml из файла ресурсов Java в Dictionary и потом конвертировано в файл ресурсов Visual Studio), и, да, я знаю толк в извращениях.


Ответ

А если так: XmlDocument.CreateElement("prefix", "name", "uri"); //для элементов new XAttribute(XNamespace.Xml + "space", "preserve"); //для атрибутов