XML LINQ 查询不返回数据

发布于 2024-10-07 21:23:38 字数 662 浏览 3 评论 0原文

我今天尝试了 LINQ to XML,但不太成功。 当我使用命名空间时,我没有得到任何数据。

这是(简化的)xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Message xmlns="urn:protocols:format13">
    <data>
    testdata
    </data>
</Message>

我尝试使用(xmlmsg是一个字符串)获取数据:

XElement root = XElement.Parse(xmlmsg);
XNamespace ns = root.Attribute("xmlns").ToString();

List<XElement> datalist =
       (from desc in root.Descendants(ns + "data")
         select desc).ToList<XElement>();

但数据列表仍然为空。如果我不使用命名空间,它就可以工作。

我之前使用过 XmlReader,它与命名空间配合得很好。但由于我的 xml 数据解析起来有点复杂,我想使用 LINQ。

有什么提示吗?

I experimented with LINQ to XML today, but I wasn't very successful.
When I use a namespace I don't get any data.

Here's the (simplified) xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Message xmlns="urn:protocols:format13">
    <data>
    testdata
    </data>
</Message>

I try to get the data with (xmlmsg is a string):

XElement root = XElement.Parse(xmlmsg);
XNamespace ns = root.Attribute("xmlns").ToString();

List<XElement> datalist =
       (from desc in root.Descendants(ns + "data")
         select desc).ToList<XElement>();

But datalist remains empty. If I don't us a namespace it works.

I used XmlReader before, which worked fine with namespaces. But as my xml data gets a little complex to parse, I wanted to use LINQ.

Any hints?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨离汐 2024-10-14 21:23:38
        XNamespace ns = root.Name.Namespace;

        List<XElement> datalist =
               (from desc in root.Descendants(ns + "data")
                select desc).ToList<XElement>();

或者为什么它不起作用;您没有访问该属性的;这也有效:

XNamespace ns = (string)root.Attribute("xmlns");

XNamespace ns = root.Attribute("xmlns").Value;
        XNamespace ns = root.Name.Namespace;

        List<XElement> datalist =
               (from desc in root.Descendants(ns + "data")
                select desc).ToList<XElement>();

or to why it didn't work; you aren't accessing the value of the attribute; this works too:

XNamespace ns = (string)root.Attribute("xmlns");

or

XNamespace ns = root.Attribute("xmlns").Value;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文