搜索基于搜索条件的XML文件*并删除节点 - ASP或PHP

时间:2011-07-03 17:22:40

标签: php asp.net xml xpath

  

可能重复:
  A simple program to CRUD node and node values of xml file

我不是在寻找确切的属性或精确的节点文本。实施例

<Items>
  <book>
    <title> Beginning Java </title>
  </book>
   <book>
    <title> Beginning ASP </title>
  </book>
  <book>
    <title> Beginning Java </title>
  </book>
  <book>
    <title> Advance Java </title>
  </book>
  <book>
    <title> Advance ASP </title>
  </book>
</items>

我想要的也是找到标题中“Beginning”或标题中“Advance”的所有书籍。野生型搜索排序。我需要什么,XPATH? ASP.NET或PHP代码都有帮助。

我这样做是为了编写一个实用工具来删除MAC上iTunes音乐库中的断开链接。

谢谢

编辑:实际XML所需的帮助 我正在根据“位置”键前面的搜索。从未遇到过这样的XML和。

再次感谢

<key>5175</key>
    <dict>
        <key>Track ID</key><integer>5175</integer>
        <key>Name</key><string>02 - Track 02</string>
        <key>Artist</key><string>Abba</string>
        <key>Album</key><string>Abba Gold</string>
        <key>Genre</key><string>English</string>
        <key>Kind</key><string>MPEG audio file</string>
        <key>Size</key><integer>5816448</integer>
        <key>Total Time</key><integer>242285</integer>
        <key>Track Number</key><integer>2</integer>
        <key>Date Modified</key><date>2003-09-28T14:37:38Z</date>
        <key>Date Added</key><date>2011-06-19T20:30:08Z</date>
        <key>Bit Rate</key><integer>192</integer>
        <key>Sample Rate</key><integer>44100</integer>
        <key>Persistent ID</key><string>9030665BDB2B4A20</string>
        <key>Track Type</key><string>File</string>
        <key>Location</key><string>file://localhost/Users/macbookpro/Music/iTunes/iTunes%20Media/Music/Abba/Abba%20Gold/02%2002%20-%20Track%2002.mp3</string>
        <key>File Folder Count</key><integer>5</integer>
        <key>Library Folder Count</key><integer>1</integer>
    </dict>

2 个答案:

答案 0 :(得分:0)

//book[contains(title, 'Beginning') or contains(title, 'Advance')]

这应该这样做

答案 1 :(得分:0)

对于ASP.NET和PHP支持普通安装的XPath(1.0),您可以使用/Items/book[contains(title, 'Beginning') or contains(title, 'Advance')]。请注意,XML节点名称和XPath表达式区分大小写,您的示例不是格式良好的XML,因为它具有开始标记<Items>,但结尾标记为</items>

对于使用ASP.NET删除节点的代码,请尝试以下行:

XmlDocument doc = new XmlDocument();
doc.Load("input.xml");
XmlNodeList booksToRemove = doc.SelectNodes("/Items/book[contains(title, 'Beginning') or contains(title, 'Advance')]");
for (int i = booksToRemove.Length - 1; i >= 0; i--) {
  booksToRemove[i].ParentNode.RemoveChild(booksToRemove[i]);
}
doc.Save("output.xml");