(C#)对于带有“:”的xml,已经使用了XNamespace,但仍然无法完成解析

本文关键字:XNamespace 于带 xml | 更新日期: 2023-09-27 18:35:52

这是我的XML内容:

<app:DocItem Name="hello" ItemId="00000000-0000-0000-0000-000000000000" xmlns:app="xxxx">
    <app:Data>
        <cccc xmlns="yyyy" SchemaWriteVersion="1">
            <Key mClass="Tag">
                <SId Namespace="abc" ElementName="VP" />
            </Key>
            <Dictionary NId="116" Count="66">
                <Item>
                    <Key TId="7" Name="TemporaryDoNotUse" />
                    <Value Signature="....">
                    </Value>
                </Item>
            </Dictionary>
        </cccc>
    </app:Data>
</app:DocItem>

这是我在 C# 函数中尝试的内容:

    public static string GetVoicePolicy(string xmlStr)
    {
        XDocument xdoc = XDocument.Parse(xmlStr);
        StringBuilder result = new StringBuilder();
        XNamespace app = "app";
        XName n2 = app + "DocItem";
        XName n3 = app + "Data";
        XElement l2 = xdoc.Element(n2); //<<--------------------Line X
        XElement l3 = l2.Element(n3);
        XElement l4 = l3.Element("cccc");
        XElement l5 = l4.Element("Dictionary");
    ....
    }

我知道对于带有字符":"的字符串,我不能直接使用"app:DocItem",但是在使用XNamespace之后,执行后我仍然在"X行"处得到"l2 == null"。

我可以看到正确的 xdoc 内容,但 l2 什么都不是。我错过了什么吗?

谢谢!

(C#)对于带有“:”的xml,已经使用了XNamespace,但仍然无法完成解析

如果你真的有

xmlns:app="xxxx"

然后你会想要

XNamespace app = "xxxx";

名称app不是命名空间的名称,它只是该特定 XML 文件中使用的本地前缀。它甚至可能每次都改变。