簡體   English   中英

解析 XML 文件,其中定義了 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM