Запросы XML, не беспокоясь о пространствах имен - PullRequest
1 голос
/ 08 сентября 2011

У меня есть XML с и без префикса для элементов, но для них не определены пространства имен.Когда я пытаюсь загрузить это, на XDocument.Load выдается ошибка (по крайней мере, я так думаю), что определенные префиксы не определены.Есть ли способ сказать платформе игнорировать префиксы пространства имен?Я использую LINQ to XML, но могу использовать что-то еще, если доступно.

Я не могу заранее предопределить их, потому что я буду работать с различными документами, которые могут иметь или не иметьпрефикс определен, а определение xmlns отсутствует.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Разве префиксы не должны представлять собой аббревиатуру для пространства имен? Я полагаю, что прежде чем обрабатывать его, вам нужно очистить префиксы, с которыми не связано пространство имен, поскольку это недопустимый XML. Быстрое регулярное выражение для замены всех префиксов формы </ prefix: with </: и <prefix: with <должны сделать это. </p>

Для этого сначала замените следующие регулярные выражения </.*?: с </ и <.*?: с < (не меняйте порядок).

1 голос
/ 09 сентября 2011

Подход к тому, что вы хотите сделать, может заключаться в использовании XmlDocument:

XmlDocument d = new XmlDocument();
using (var textReader = new XmlTextReader(@"test.xml"))
{
    textReader.Namespaces = false;
    d.Load(textReader);
}

Вы потеряете силу запроса данных, используя синтаксис LINQ to XML.Вы можете фактически использовать LINQ to XML и игнорировать пространство имен, задав для каждого префикса в файле следующую строку

nameSpaceManager.AddNamespace("prefixName", "urn:ignore");, где nameSpaceManager имеет тип XmlNamespaceManager.Но из твоего вопроса я чувствую, что это не разумное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...