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

时间:2016-02-24 01:28:17

标签: c# xml

这是我的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只是没有。我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果你真的有

xmlns:app="xxxx"

然后你想要

XNamespace app = "xxxx";

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