【发布时间】:2018-11-09 10:29:44
【问题描述】:
我需要替换 <ResourceId> 元素的值。如果我之前删除所有内容
<VectorLayerDefinition> 在这个元素之后一切正常,但我有很多这些 xml 文件,我无法手动删除任何内容。有什么建议吗?
这里是xml代码:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="sdf:FeatureClass1">
<ns0:FeatureSource xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" rdf:resource="fsd://1" />
</rdf:Description>
<rdf:Description rdf:about="sdf:FeatureClass1">
<rdf:type rdf:resource="http://www.autodesk.com/gis/resource/definitions/LayerDefinitionResource" />
</rdf:Description>
<rdf:Description rdf:about="sdf:FeatureClass1">
<ns0:name xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">FeatureClass1</ns0:name>
</rdf:Description>
<rdf:Description rdf:about="sdf:FeatureClass1">
<ns0:isURL xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">no</ns0:isURL>
</rdf:Description>
<rdf:Description rdf:about="sdf:FeatureClass1">
<ns0:description xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">
</ns0:description>
</rdf:Description>
<rdf:Description rdf:about="sdf:FeatureClass1">
<ns0:LayerDefinitionResourceStream xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">
<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LayerDefinition-2.4.0.xsd" version="2.4.0">
<VectorLayerDefinition>
<ResourceId>Library://SDF_1.FeatureSource</ResourceId>
<FeatureName>sdf:FeatureClass1</FeatureName>
<FeatureNameType>FeatureClass</FeatureNameType>
<Geometry>Geometry</Geometry>
</VectorLayerDefinition>
</LayerDefinition>
</ns0:LayerDefinitionResourceStream>
</rdf:Description>
<rdf:Description rdf:about="fsd://1">
<rdf:type rdf:resource="http://www.autodesk.com/gis/resource/definitions/FeatureSourceResource" />
</rdf:Description>
<rdf:Description rdf:about="fsd://1">
<ns0:name xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">1</ns0:name>
</rdf:Description>
<rdf:Description rdf:about="fsd://1">
<ns0:isURL xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">no</ns0:isURL>
</rdf:Description>
<rdf:Description rdf:about="fsd://1">
<ns0:description xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">
</ns0:description>
</rdf:Description>
<rdf:Description rdf:about="fsd://1">
<ns0:FeatureSourceResourceStream xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal"> </ns0:FeatureSourceResourceStream>
</rdf:Description>
<rdf:Description rdf:about="LayerSchema">
<ns0:version xmlns:ns0="http://www.autodesk.com/gis/resource/definitions/" xml:lang="en" rdf:parseType="Literal">1</ns0:version>
</rdf:Description>
</rdf:RDF>
这是我的代码:
public void Main()
{
XDocument doc = XDocument.Load(@"D:\Repositories\Library\Content\Layers\FeatureClass1.LayerDefinition");
string str = doc.Element("VectorLatyerDefinition").Element("ResourceId").Value;
doc.Element("VectorLayerDefinition").Element("ResourceId").Value = "SomeValue";
doc.Save(@"D:\Repositories\Library\Content\Layers\FeatureClass1.LayerDefinition");
}
但在我“清理”xml文件后它可以工作
【问题讨论】:
-
如何在文件中删除或添加元素?基本上手动这样做是一个非常糟糕的主意。而是让序列化程序完成他们的工作,他们读取和写入文件。
-
确实——我会通过加载
XDocument,对其进行操作,然后再次保存来做到这一点。如果没有看到您的代码,将很难为您提供进一步的帮助。 -
@HimBromBeere 我只是打开文件并手动删除除
<VectorLayerDefinition>元素之外的所有内容。我尝试使用 linq 完成我的工作,但没有成功,因为我无法通过第一个节点。 -
元素只在当前关卡中查找。您需要将递归向下树的后代。