无法从 xml 个节点获取值

Unable to get values from xml nodes

我正在尝试通过 xml 进行解析并获取一些值并尝试了多种方法,但我无法获取这些值。

这是我目前尝试过的方法

        string fileName = @"C:\Users\one\OneDrive\Desktop\PP\SnippetWithImage.idms";
        string xmlString = System.IO.File.ReadAllText(fileName);

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(fileName);
        XmlNodeList spreadNodes = xmlDoc.GetElementsByTagName("spread");
        foreach (XmlNode spreadNode in spreadNodes)
        {
            var linkNodes = spreadNode.SelectNodes("//rectangle/image/link");
            foreach (XmlNode linkNode in linkNodes)
            {
                Console.WriteLine("path : " + linkNode.SelectSingleNode("LinkResourceURI").InnerText);
            }
        }

这里spreadNodes计数总是0。

我也用 XElements 试过这个,也用过 Decendents,但结果还是一样。

这里是xml结构https://codebeautify.org/xmlviewer/y22db1f26

我正在加载的文件是一个 InDesign 片段文件。我正在尝试从链接中获取 linkResourceURI 属性 值,该链接是图像的子图像,图像是矩形的子图像,矩形图像是展开图像的子图像。

一些quick debugging shows that spreadNodes is empty, to start with. The most obvious cause is that the element name is Spread not spread, and if we make this change, we see spreadNodes has one element.

接下来,很明显 spreadNode.SelectNodes("//rectangle/image/link") 没有返回任何东西。同样,这可能是大写:将其更改为 //Rectangle/Image/Link,然后我们 get a NullReferenceException。至少有进步。

我们收到该异常是因为 linkNode.SelectSingleNode("LinkResourceURI") 返回 null。原来那是因为 LinkResourceURI 是一个属性,而你正在寻找一个元素。将其更改为 linkNode.Attributes["LinkResourceURI"].InnerTexteverything works as expected.

XmlNodeList spreadNodes = xmlDoc.GetElementsByTagName("Spread");
foreach (XmlNode spreadNode in spreadNodes)
{
    var linkNodes = spreadNode.SelectNodes("//Rectangle/Image/Link");
    foreach (XmlNode linkNode in linkNodes)
    {
        Console.WriteLine("path : " + linkNode.Attributes["LinkResourceURI"].InnerText);
    }
}