相关疑难解决方法(0)

XPath如何处理XML命名空间?

XPath如何处理XML命名空间?

如果我使用

/IntuitResponse/QueryResponse/Bill/Id
Run Code Online (Sandbox Code Playgroud)

要解析下面的XML文档,我得到0个节点.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" 
                time="2016-10-14T10:48:39.109-07:00">
    <QueryResponse startPosition="1" maxResults="79" totalCount="79">
        <Bill domain="QBO" sparse="false">
            <Id>=1</Id>
        </Bill>
    </QueryResponse>
</IntuitResponse>
Run Code Online (Sandbox Code Playgroud)

但是,我没有在XPath中指定命名空间(即http://schema.intuit.com/finance/v3不是路径的每个标记的前缀).Id如果我没有明确告诉它,XPath怎么知道我想要哪个?我想在这种情况下(因为只有一个命名空间)XPath可以xmlns完全忽略它.但如果有多个名称空间,事情可能会变得丑陋.

xml xpath xml-namespaces

26
推荐指数
1
解决办法
7878
查看次数

Xml.Linq:Descendants()什么都不返回

我试图使用XElement从ncx文件(即xml文件)中读取:

XElement foundNode = ncx.Descendants("navPoint").Where(r => r.Attribute("class").Value == "chapter").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

因此,foundNode为null,因为ncx.Descendants("navPoint")返回空枚举.但数据是:

<?xml version='1.0' encoding='utf-8'?>
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="en">
  <head>
    <meta content="8eab2efe-d584-478a-8c73-1304d2ae98fa" name="dtb:uid"/>
    <meta content="3" name="dtb:depth"/>
    <meta content="calibre (0.8.12)" name="dtb:generator"/>
    <meta content="0" name="dtb:totalPageCount"/>
    <meta content="0" name="dtb:maxPageNumber"/>
  </head>
  <docTitle>
    <text>Fine</text>
  </docTitle>
  <navMap>
    <navPoint class="chapter" id="27665f37-ecf5-4934-a044-4f77152e54d9" playOrder="1">
      <navLabel>
        <text>I. BLIND</text>
      </navLabel>
      <content src="Fine_split_003.html"/>
Run Code Online (Sandbox Code Playgroud)

你能解释一下这里有什么问题吗?谢谢.

c# xml linq-to-xml

5
推荐指数
1
解决办法
4592
查看次数

将 LINQ XML 与命名空间结合使用

我正在尝试在 XML 文档中查找节点,如下所示:

<?xml version="1.0"?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2">
  <Activities>
    <Activity Sport="CyclingTransport">
      <Id>2014-07-08T15:28:14Z</Id>
    </Activity>
  </Activities>
</TrainingCenterDatabase>
Run Code Online (Sandbox Code Playgroud)

我的目标是使用如下代码提取节点值“Id”:

XDocument doc = XDocument.Load(filePath);
List<string> urlList = doc.Root.Descendants("Id")
                          .Select(x => (string)x)
                          .ToList();
Console.WriteLine(urlList.Count);
Run Code Online (Sandbox Code Playgroud)

然而计数是 0,而我期望的是 1。

经过一些调试和编辑 XML 后,我注意到如果我更改节点TrainingCenterDatabase并删除以下属性:

<TrainingCenterDatabase>
Run Code Online (Sandbox Code Playgroud)

那么结果就是预期的计数为 1。

所以我的问题是如何考虑命名空间,以便在节点TrainingCenterDatabase具有这些属性时可以获得值?

c# xml linq

4
推荐指数
1
解决办法
633
查看次数

LINQ to XML - 为什么Elements始终为null

我无法从我的XML中获取元素.我无法从我的XML获取Vehicles或Vehicle元素,它总是返回null.

谁能看到我出错的地方?

这是我的代码......

    [TestMethod]
    public void TestDeleteVehicleFromXMLFile()
    {
        using (FileStream stream = new FileStream(base._TestXPathXMLFile, FileMode.Open))
        {
            try
            {
                XDocument xDoc = XDocument.Load(stream);
                var q = from RootNode in xDoc.Descendants("VehicleCache")

                    select new
                    {
                        // Vehicles & VehiclesList is always null
                        Vehicles = RootNode.Elements(XName.Get("Vehicle")).ToList(),
                        VehiclesList = RootNode.Elements(XName.Get("Vehicles")).ToList(),
                        SelfNode = RootNode.DescendantNodesAndSelf().ToList(),
                        DescendantNodes = RootNode.DescendantNodes().ToList()
                    };

                // used to see what is in item
                foreach (var item in q)
                {
                    int i = 0;
                }
            }
            catch(Exception E)
            {
                Assert.Fail(E.Message);
            }
        }
    }


<VehicleCache> …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-xml

1
推荐指数
1
解决办法
1537
查看次数

标签 统计

c# ×3

xml ×3

linq-to-xml ×2

linq ×1

xml-namespaces ×1

xpath ×1