修改不同XML文件属性的想法c#

时间:2010-08-26 10:01:34

标签: c# xml

这是我的情景,

  1. 我将XML文件从原始目录复制到目标目录
  2. 我在原始目录中修改文件的属性
  3. 我将修改后的文件属性(来自原始目录)与复制文件的属性(在目标目录中)进行比较它们当然不应该相同
  4. 我的问题是并非所有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”进行查询..但更实际的解决方案是在第一个属性之后修改第一个属性。

    由于

1 个答案:

答案 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");