2010-07-14 59 views
1

這裏的刪除一個節點/元素就是我需要做的: 示例XML(不知道這是否顯示在這裏)從一組類似的節點

<Tags> 
<Tag ID="0" UserTotal="1" AllowMultipleSelect="1"> 
    <Name>BaseSamples</Name> 
    <Sample ID="546" Count="1">Sample1 </Sample> 
    <Sample ID="135" Count="1">Sample99</Sample> 
    <Sample ID="544" Count="1">Sample2</Sample> 
    <Sample ID="5818" Count="1">Sample45</Sample> 
    </Tag> 
    </Tags> 

我想刪除:

<Sample ID="135" Count="1">Sample99</Sample> 

並通過XML早在:

<Tags> 
<Tag ID="0" UserTotal="1" AllowMultipleSelect="1"> 
    <Name>BaseSamples</Name> 
    <Sample ID="546" Count="1">Sample1 </Sample> 
    <Sample ID="544" Count="1">Sample2</Sample> 
    <Sample ID="5818" Count="1">Sample45</Sample> 
    </Tag> 
    </Tags> 

任何幫助/提示將不勝感激。我將知道傳入的Sample'ID'屬性以及'SampleName'(元素的CDATA)。

+0

艾米,請不要把像「C#」的字符串在您的標題,如果你只是想分類你的問題。這就是標籤的用途,並且你已經在問題上獲得了C#標籤。 – 2010-07-14 23:26:04

+0

感謝您的輸入。這是我第一次嘗試這個論壇,所以我猜猜它真是太棒了! – Amy 2010-07-15 16:56:58

回答

2

你應該能夠做這樣的事情在C#

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("XMLFile.xml");  
XmlNode node = xmlDoc.SelectSingleNode("/Tags/Tag/Sample[@ID='135']"); 
XmlNode parentNode = node.ParentNode; 
if (node != null) { 
    parentNode.RemoveChild(node); 
} 
xmlDoc.Save("NewXMLFileName.xml"); 
1

執行鍼對XML樣式表會產生預期的ouptut:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes" /> 

    <!--identity template copies all content forward --> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <!--empty template will prevent this element from being copied forward--> 
    <xsl:template match="Sample[@ID='135']"/> 

</xsl:stylesheet> 
+0

嗨,謝謝你的回答。不幸的是,我必須爲此編寫C#代碼。有沒有辦法使用'RemoveChild()'方法來刪除此節點?我研究了一下,使用XmlNode對象和removeChild()方法(同時檢查/ Sample [@ ID ='135'])..不知道我在做什麼錯誤。 – Amy 2010-07-15 16:58:42

+0

您可以擁有調用XSLT的C#代碼......我不是C#開發人員,因此我無法提供使用RemoveChild()的確切代碼段。但是,您提供的XPATH不正確,這可能是它不能爲您工作的原因。它應該是'/ Tags/Tag/Sample [@ID ='135']'。 – 2010-07-16 01:13:05

1

感謝您的回答馬德斯·漢森,是很有幫助!!! 感謝所有其他人! 是的,我的路是錯的。 你的代碼工作,但在我的情況下,做'保存'現在導致錯誤。 我正在使用相同的字符串來保存信息(不是newfile.xml,如您在示例答案中所述)。也許這是造成我的麻煩,這是我做過什麼來解決這個問題,新:

XmlDocument workingDocument = new XmlDocument(); 
workingDocument.LoadXml(sampleInfo); //sampleInfo comes in as a string. 
int SampleID = SampleID; //the SampleID comes in as an int. 

XmlNode currentNode; 
XmlNode parentNode; 
// workingDocument.RemoveChild(workingDocument.DocumentElement.SelectSingleNode("/Tags/Tag/Sample[@ID=SampleID]")); 
    if (workingDocument.DocumentElement.HasChildNodes) 
    {        
          //This won't work: currentNode = workingDocument.RemoveChild(workingDocument.SelectSingleNode("//Sample[@ID=" + SampleID + "]")); 
          currentNode = workingDocument.SelectSingleNode("Tags/Tag/Sample[@ID=" + SampleID + "]"); 
          parentNode = currentNode.ParentNode; 
          if (currentNode != null) 
          { 
           parentNode.RemoveChild(currentNode); 
          }        


       // workingDocument.Save(sampleInfo); 

          sampleInfo = workingDocument.InnerXml.ToString(); 
}