找到匹配的& 2个plist XML文件之间的非匹配元素?

时间:2017-05-02 05:28:51

标签: xml xslt match

查找匹配&整个文件中2个plist XML文件之间的非匹配元素?

我从iOS提交了2个.plist XML;只是一个FYI。

  • 重要的是弄清楚两个文件中存在哪些项目(应用程序),哪些不存在。

  • 因为,它们可以存在于各种位置,任何顺序,XML结构的任何级别,使用Beyond Compare等的简单文件比较都不起作用。

当XSLT 2.0正在运行并且Saxon是唯一的兼容解析器时,我已经完成了相当多的XML / XSLT代码。我在Win 8.1上有Altova XML Spy,DiffDog。

但是,我可以使用非XML / XSL机制来确定双方/双方都缺少什么,以及两者中有什么,如果它&#39更容易。

SpringBoard图标布局 - IconState.plist

我一直在寻找一种方法来获取所有未隐藏的应用程序列表(因此不包括Web.app之类的内容)。
虽然我找到了它((NSArray *)[[SBIconModel sharedInstance] visibleIconIdentifiers])。我还发现了一个字典SpringBoard保留了Icon布局。

让我们仔细看看:

  • 停靠栏图标位于键'buttonBar'的单独数组中;
  • 这些网页位于关键字> iconLists';
  • 的数组中
  • 每个页面都是iconLists数组中的一个单独数组;
  • 在每个页面的数组中,图标为字符串;
  • 图标字符串是apps displayId;
  • 文件夹是NSDictionary;
  • 每个文件夹都有这些键;
    • 一个displayName键,它是一个字符串,它的名字;
    • iconLists,每个页面都有一个图标数组(displayId strings);
<!-- language-all: lang-xml -->

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
 <all>
  <!-- Outer <dict> replaced by <all> -->
  <key>buttonBar</key>
  <array>
   <string>com.apple.MobileSMS</string>
   <string>com.apple.mobilemail</string>
   <string>com.apple.mobilesafari</string>
  </array>
  <key>iconLists</key>
  <pages>
   <!-- replaced by <pages> -->
   <page>
    <!-- replaced by <page> -->
    <string>com.apple.mobilephone</string>
    <string>com.apple.mobilecal</string>
    <string>com.apple.mobileslideshow</string>
    <string>com.apple.camera</string>
    <string>com.apple.videos</string>
    <string>com.apple.youtube</string>
    <string>com.apple.Maps</string>
    <string>com.apple.weather</string>
    <string>com.apple.mobilenotes</string>
    <string>com.apple.reminders</string>
    <string>com.apple.mobiletimer</string>
    <string>com.apple.gamecenter</string>
    <dict>
     <!-- Inner <dict> represents Folders -->
     <key>displayName</key>
     <string>Apple</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.apple.mobileme.fmf1</string>
       <string>com.apple.Cards</string>
       <string>com.apple.iBooks</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <string>com.apple.MobileStore</string>
    <string>com.apple.AppStore</string>
    <string>com.apple.Preferences</string>
   </page>
   <page>
    <dict>
     <key>displayName</key>
     <string>Utilities</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.apple.MobileAddressBook</string>
       <string>com.apple.calculator</string>
       <string>com.apple.VoiceMemos</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <dict>
     <key>displayName</key>
     <string>Jailbreak</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.saurik.Cydia</string>
       <string>libactivator</string>
       <string>eu.heinelt.ifile</string>
       <string>crash-reporter</string>
       <string>com.googlecode.mobileterminal.Terminal</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <dict>
     <key>displayName</key>
     <string>Social</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.atebits.Tweetie2</string>
       <string>info.colloquy.mobile</string>
       <string>com.tapbots.Tweetbot</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <dict>
     <key>displayName</key>
     <string>Other</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.apple.stocks</string>
       <dict>
        <key>displayName</key>
        <string>Newsstand</string>
        <key>iconLists</key>
        <array/>
        <key>listType</key>
        <string>newsstand</string>
       </dict>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <string>com.clickgamer.AngryBirds</string>
    <string>com.apple.mobileipod</string>
   </page>
   <page>
    <dict>
     <key>displayName</key>
     <string>Utilities</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.apple.MobileAddressBook</string>
       <string>com.apple.calculator</string>
       <string>com.apple.VoiceMemos</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <dict>
     <key>displayName</key>
     <string>Jailbreak</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.saurik.Cydia</string>
       <string>libactivator</string>
       <string>eu.heinelt.ifile</string>
       <string>crash-reporter</string>
       <string>com.googlecode.mobileterminal.Terminal</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <dict>
     <key>displayName</key>
     <string>Social</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.atebits.Tweetie2</string>
       <string>info.colloquy.mobile</string>
       <string>com.tapbots.Tweetbot</string>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <dict>
     <key>displayName</key>
     <string>Other</string>
     <key>iconLists</key>
     <array>
      <array>
       <string>com.apple.stocks</string>
       <dict>
        <key>displayName</key>
        <string>Newsstand</string>
        <key>iconLists</key>
        <array/>
        <key>listType</key>
        <string>newsstand</string>
       </dict>
      </array>
     </array>
     <key>listType</key>
     <string>folder</string>
    </dict>
    <string>com.clickgamer.AngryBirds</string>
    <string>com.apple.mobileipod</string>
   </page>
  </pages>
 </all>
</plist>

1 个答案:

答案 0 :(得分:1)

根据您的评论,您似乎需要一个表格,其中列出了string元素的所有唯一array值,这两个值都出现在两个文件中,包括一个唯一的值列表第一个文件和第二个文件唯一的文件。

假设您已将这两个文件加载到名为File1File2的变量中,您可以使用XPath表达式生成主要完整列表,如:

distinct-values($File1//array/string | $File2//array/string)

要测试File1的唯一值,其中上下文项.是主要完整列表中的值之一:

<xsl:if test=". = $File1//array/string and not(. = $File2//array/string)">

...以及File2独有的值:

<xsl:if test=". = $File2//array/string and not(. = $File1//array/string)">

可以进一步细化这种方法,例如对列表进行排序。以上解决了您需求的核心。从那里,您可以决定如何布置值,无论是在HTML表格还是其他结构中。

相关问题