C#을 사용하여 특정 xml 태그를 삭제해야하지만 문제는 태그가 다른 상위 태그에있을 수 있다는 것입니다.특정 노드/태그의 부모 노드/태그 가져 오기 #
그래서 특정 태그를 검색하고 상위 태그를 가져 와서 삭제해야합니다.
이 내 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>
원하는 출력 : 방금 요소를 찾아으로 Remove
를 호출 할 수 Linq
Xml
에 사용 나는 XDocument
를 사용하여 선호
<new-element>Askquestionzero Publisher</new-element>
? 예상 출력을 포함 시키면 도움이됩니다. –
질문이 업데이트됩니다. – askquestionzero