我有一个可能包含几种类型节点的xml,但我只对某些特定节点类型感兴趣。我希望更改我感兴趣的节点并保存结果,而其他节点应保持不变。
例如我的xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<Unknown>
...
<UnKnown/>
<CompanyName>
<AttrContainer>
<Attr type="String">
<Name value="'Name'" />
<Value value="'AttrContainer'" />
</Attr>
<Unknown>
...
<UnKnown/>
<SubContainer>
<AttrContainer value="'WSSMetadata'" />
<AttrContainer>
<Attr type="String">
<Name value="'Name'" />
<Value value="'AttrContainer'" />
</Attr>
<SubContainer>
<WSSMetadata value="'afe2e194-0ce7-4bfc-b446-9623e4fe7189'" />
<AttrContainer>
<Attr type="String">
<Name value="'Name'" />
<Value value="'WSSMetadata'" />
</Attr>
<Attr type="Uuid">
<Name value="'scanID'" />
<Value value="afe2e194-0ce7-4bfc-b446-9623e4fe7189" />
</Attr>
<Attr type="String">
<Name value="'imagePath'" />
</Attr>
<Attr type="String">
<Name value="'imagePathHD'" />
</Attr>
<Attr type="String">
<Name value="'imagePathThumbnail'" />
</Attr>
<Attr type="String">
<Name value="'imagePathGrey'" />
<Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey.jpg'" />
</Attr>
<Attr type="String">
<Name value="'imagePathGreyHD'" />
<Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_hd.jpg'" />
</Attr>
<Attr type="String">
<Name value="'imagePathGreyThumbnail'" />
<Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_thumbnail.jpg'" />
</Attr>
</AttrContainer>
</SubContainer>
</AttrContainer>
</SubContainer>
</AttrContainer>
</CompanyName>
我想将'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_thumbnail.jpg'
更改为其他内容,并回写XML,重点是我不想删除或更改<unknown>
部分。
我编写代码来读取我感兴趣的节点,代码可以读取它们并从中提取数据,但是当我没有关于其他节点的信息时,如何编写重置?
答案 0 :(得分:1)
xslt identity transform是这类工作的一个很好的起点,即:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
然后,为您想要修改的xml
元素添加模板。
答案 1 :(得分:0)
如果需要在代码中进行操作,可以按如下方式阅读文件。
String FileContent = null;
using (StreamReader streamReader = new StreamReader(@"TheFile.xml"))
{
FileContent = streamReader.ReadToEnd();
}
XmlDocument Doc = new XmlDocument();
Doc.LoadXml(FileContent);
在代码中进行了所需的修改后,可以将其保存回文件。
答案 2 :(得分:0)
作为XSLT转换的替代方法(非常适合任务),您只需保存XML文档即可。
完整的方法: