gpt4 book ai didi

xml - 如何在 Inno Setup 中读取 XML 的标签属性

转载 作者:行者123 更新时间:2023-12-03 16:24:08 25 4
gpt4 key购买 nike

这是 XML 文件:

<book_info>
<book title = "Peter Pan">
<publisher name="Penguin" edition="2nd" date ="2/6/2016" />
<Page size= "207" />
<author name = "J M Barrie"/>
<info genre = "novel" lang = "English"/>
</book>
<book title = "Room of Many Color">
<publisher name="Penguin" edition="1st" date ="3/11/2000" />
<Page size= "387" />
<author name = "Ruskin Bond"/>
<info genre = "sort stories" lang = "English"/>
</book>
</book_info>

这是我尝试访问发布者名称的方式:

bookXML := CreateOleObject('Msxml2.DOMDocument.6.0');
bookXML.async := False;
bookXML.load(ExpandConstant('{tmp}\book.xml'));
bookNode := bookXML.SelectSingleNode('//book_info/book[name/text()=' + bookName + ']');
bookPubName := bookNode.SelectSingleNode('publisher[name]').text;

但它总是在最后一行给出 NIL 接口(interface)异常。

bookPubName := bookNode.SelectSingleNode('publisher[name]').text;

我查了 How to select XML tag based on value of its child tag in Inno Setup但无法解决。

最佳答案

目前还不清楚你想做什么。 bookNode 的 XPath指 name标签,而是一个 book没有name标签,甚至不是 name属性。

无论如何,让我们假设您想找出 name 的值。 publisher 的属性book 的标签与 title (?) 属性等于给定值。

  • 引用 title属性使用 @title而不是引用不存在的 name 的文本内容标签:

    //book_info/book[@name=...]
  • 将字符串值用单引号括起来(您必须在 Pascal 字符串中将它们加倍):

    '//book_info/book[@name=''' + bookName + ''']'
  • 选择 name 的值publisher 的属性标签,再次使用 @name语法(name 指的是不存在的子标签)。
    publisher[@name]


  • 您可以将两个 XPath 合并为一个,例如:

    bookPubName :=
    bookXML.SelectSingleNode(
    '//book_info/book[@title=''' + bookName + ''']/publisher/@name').text;

    关于xml - 如何在 Inno Setup 中读取 XML 的标签属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49221243/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com