这是我的情景,
我的问题是并非所有XML文件都具有相同的属性。
我尝试添加一个公共属性并对其进行修改但是从DB中检索文件,每个属性代表一个coloumn,我无法修改DB
我正在考虑循环遍历属性,直到我达到第一个“非固定”属性并对其进行修改。那可能吗?如果是这样的话?如果还有其他解决方案,我会更加欣赏它:)
以下是我的部分xmls
的示例<CtApproachTypes
DataclassId="1992A9CE-B048-4676-BFD4-FD81F1A65401"
EntityId="1992A9CE-B048-4676-BFD4-FD81F1A65401"
Name="PAR"
Remark="No Remarks"/>
</CT_ApproachTypes>
<MiMissions
DataclassId="C196A66B-4FA1-461C-9EEF-95A4F2085051"
EntityId="C196A66B-4FA1-461C-9EEF-95A4F2085051"
MissionName="Standard"
isib="1"
</MiMissions>
<StSituations
DataclassId="679FAC3C-C9EF-41FD-9A13-957915605F01"
EntityId="679FAC3C-C9EF-41FD-9A13-957915605F01"
SitName="Standard"
Status="C"
Template="1">
</StSituations>
我想跳过前两个属性并修改它们之后的第一个属性。
注意:我检查了XML文件,所有这些文件似乎都有一个带有“-name”的属性。我正在考虑使用“like”进行查询..但更实际的解决方案是在第一个属性之后修改第一个属性。
由于
答案 0 :(得分:0)
如果你要做的是更新XML的属性,这可能是一种方式:
XElement elem = XElement.Load("xmlFilePath");
System.Xml.XPath.Extensions.XPathSelectElement(elem, "xpath").SetAttributeValue("attributeName", "newValue");
其中xmlFilePath是您要更改的XML的路径,xpath是xml元素的路径,attributeName是您要更改的nodes属性的名称... 当然,你必须为你正在使用的每个xml添加一个带有属性的自定义节点。
修改强>
既然你说你不能修改两个位置的XML文件,那么你剩下的就是比较文件本身的FileInfo
属性。
如果FileInfo
属性不是您需要的,那么除了创建跟踪数据库或文件之外没有其他解决方案,它将包含您的原始目标和目标目录的属性值,您可以通过它们进行比较并采取适当的行动。
例如,如果您的Original和Target映射1对1,那么您可以拥有一个简单的表结构,如'TableName,OriginalValue,TargetValue'。你要保留这个'跟踪'数据(db,xml文件,其他......)取决于条目的数量和你当前的架构......
<强> EDIT2:强> 如果你不想附加到找到的第一个属性,你可以使用它:
XElement elem = XElement.Load("myfilepath.xml");
elem.FirstAttribute.SetValue(elem.FirstAttribute.Value + "|myothervalue");