我需要使用c#刪除特定的xml標籤,但問題是,該標籤可能位於不同的父標籤中。獲取C#中特定節點/標籤的父節點/標籤#
因此,我需要搜索該特定標籤並獲取其父標籤,然後將其刪除。
這是我的xml文件
<PublisherInfo>
<PublisherName value="1">Askquestionzero Publisher</PublisherName>
<PublisherLocation>Ph</PublisherLocation>
<PublisherImprintName>Askquestionzero</PublisherImprintName>
<PublisherLogo>
<Tada>Remove this value and its content</Tada>
</PublisherLogo>
<PublisherURL>Askquestionzero.com</PublisherURL>
</PublisherInfo>
,這是我的代碼
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\Users\user\Desktop\askquestion.xml");
XmlNode nodeToDelete = xmlDoc.SelectSingleNode("/PublisherInfo/PublisherLogo/Tada");
if (nodeToDelete != null)
{
nodeToDelete.ParentNode.RemoveChild(nodeToDelete);
}
Console.WriteLine(xmlDoc.OuterXml);
代碼的作品,但我需要指定它的父標籤。那麼如何循環訪問xml文件,並且如果找到Tada
標記,則獲取其父標記,然後將其刪除。
預期輸出:
<PublisherInfo>
<PublisherName value="1">Askquestionzero Publisher</PublisherName>
<PublisherLocation>Ph</PublisherLocation>
<PublisherImprintName>Askquestionzero</PublisherImprintName>
<PublisherLogo>
</PublisherLogo>
<PublisherURL>Askquestionzero.com</PublisherURL>
</PublisherInfo>
另一個問題:
我也需要改變一個XML文件的節點。該文件與上述相同。
以下是更改xml節點/標記名稱的代碼。但它保持其屬性。我想要它改變它的標籤名稱並刪除它的屬性。
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"C:\Users\user\Desktop\askquestion.xml");
Console.WriteLine(xmlDocument.OuterXml);
XmlElement element = (XmlElement)xmlDocument.GetElementsByTagName("PublisherName")[0];
XmlElement renamedElement = (XmlElement)RenameNode(element, null, "new-element");
Console.WriteLine(xmlDocument.OuterXml);
public static XmlNode RenameNode(XmlNode node, string namespaceUri, string qualifiedName)
{
if (node.NodeType == XmlNodeType.Element)
{
XmlElement oldElement = (XmlElement)node;
XmlElement newElement = node.OwnerDocument.CreateElement(qualifiedName, namespaceUri);
while (oldElement.HasAttributes)
{
newElement.SetAttributeNode(oldElement.RemoveAttributeNode(oldElement.Attributes[0]));
}
while (oldElement.HasChildNodes)
{
newElement.AppendChild(oldElement.FirstChild);
}
if (oldElement.ParentNode != null)
{
oldElement.ParentNode.ReplaceChild(newElement, oldElement);
}
return newElement;
}
else
{
return null;
}
}
以上代碼的輸出:
<new-element value="1">Askquestionzero Publisher</new-element>
所需的輸出:
<new-element>Askquestionzero Publisher</new-element>
你只是想刪除'Tada'元素或者包括父元素?這將有助於如果你包括你的預期輸出。 –
問題已更新。謝謝 – askquestionzero