如何通过XPath获取Plist XML中的所有同级文本?

问题描述 投票:0回答:1

我正在从Content.plist xml文件中提取值。我已经能够成功获取大部分数据。但是,我正在努力将其表示为一组字典:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>MEDataItemDisplayName</key>
    <string></string>
    <key>MEDataItemURLStringForBrowserViewing</key>
    <string></string>
    <key>MEDataItemUUID</key>
    <string></string>
    <key>MEPostTags</key>
    <string></string>
    <key>cargoKind</key>
    <string>UnstructuredVideo</string>
    <key>categoryTerms</key>
    <array>
        <dict>
            <key>id</key>
            <string>101</string>
            <key>isPrimaryTerm</key>
            <false/>
            <key>name</key>
            <string>Category A</string>
            <key>persistenceTermVersion</key>
            <integer>1</integer>
            <key>termUseCount</key>
            <integer>19</integer>
        </dict>
        <dict>
            <key>id</key>
            <string>62</string>
            <key>isPrimaryTerm</key>
            <false/>
            <key>name</key>
            <string>Category B</string>
            <key>persistenceTermVersion</key>
            <integer>1</integer>
            <key>termUseCount</key>
            <integer>5</integer>
        </dict>
        <dict>
            <key>id</key>
            <string>63</string>
            <key>isPrimaryTerm</key>
            <false/>
            <key>name</key>
            <string>Category C</string>
            <key>persistenceTermVersion</key>
            <integer>1</integer>
            <key>termUseCount</key>
            <integer>61</integer>
        </dict>
    </array>
</dict>

我可以通过以下方式获取第一个值文本:

//key[.='categoryTerms']/following-sibling::array/dict/key[.='name']/following-sibling::string[1]/text()
  • 类别A

但是,我正在努力编写返回所有类别文本的xpath:

  • 类别A
  • 类别B
  • 类别C
xml xpath plist
1个回答
0
投票

我试图为您重现错误,输出为

类别AC类别BC类别B

根据您输入的XML是正确的。

为了使输出更可口,您必须像这样使用XPath-2.0及其string-join()函数:

string-join(//key[.='categoryTerms']/following-sibling::array/dict/key[.='name']/following-sibling::string[1]/text(),'&#xa;')

输出将是:

Category A
Category B
Category B

第三个元素也是Category B的原因来自您输入的XML。

© www.soinside.com 2019 - 2024. All rights reserved.