2011-07-03 101 views
-3

可能重複:
A simple program to CRUD node and node values of xml file搜索XML文件*根據*搜索條件和刪除節點 - ASP或PHP

我不是在尋找一個確切的屬性或和詳細的節點文本。例如

<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> 

我希望能夠太是發現,在標題中的標題或「高級」,「初」的所有書籍。各種野生型搜索。我需要什麼,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> 

回答

0

在XPath(1.0)而言,其ASP.NET和PHP的支持與正常安裝就可以使用/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"); 
+0

你的答案是對極了,但我需要用我的實際交更多的幫助。我已經在原始問題中發佈了代碼。另外我的編譯器VS2010(.NET 4)也在抱怨booksToRemove.Length。我不得不使用.Count。謝謝 –

+0

我實際上使用了不同的代碼,因爲我更新了上面的代碼。行booksToRemove [i] .ParentNode.RemoveChild(booksToRemove [i]);仍然不適合我。任何想法爲什麼? –

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

這應該這樣做