![](/img/trans.png)
[英]Why does XElement fall over when parsing an xml file with an xmlns?
[英]Parsing XML file with xmlns tag defined but not using namespaces
我正在努力使用XPathNavigator
解析XPathDocument
,其中 XML 文檔包含xmlns
標記,但沒有使用命名空間前綴。
<?xml version="1.0" encoding="UTF-8"?>
<Order version="1" xmlns="http://example.com">
<Data>
<Id>1</Id>
<b>Aaa</b>
</Data>
</Order>
SelectSingleNode
方法需要定義了命名空間的命名空間管理器。
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);
nsmgr.AddNamespace("ns","http://example.com");
因此,我必須在所有 XPath 表達式中開始使用ns
前綴,盡管原始 XML 文件不使用前綴,例如:
nav.SelectSingleNode("/ns:Order/ns:Data/ns:Id", nsmgr)
這增加了不必要的復雜性。
有什么方法可以推動XPathNavigator
忽略命名空間及其前綴? 至少使用前綴,因為命名空間定義本身只存在一次,所以沒有太多的努力
XML 具有默認命名空間。 所以每個 XML 元素都綁定到它,可見與否。
最好使用LINQ 到 XML 。
它是首選的 XML API,自 2007 年起在 .Net Framework 中可用。
c#
void Main()
{
XDocument xdoc = XDocument.Parse(@"<Order version='1' xmlns='http://example.com'>
<Data>
<Id>1</Id>
<b>Aaa</b>
</Data>
</Order>");
XNamespace ns = xdoc.Root.GetDefaultNamespace();
foreach (XElement elem in xdoc.Descendants(ns + "Data"))
{
Console.WriteLine("ID: {0}, b: {1}"
, elem.Element(ns + "Id")?.Value
, elem.Element(ns + "b")?.Value);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.