转换文件以基于子节点的文本值替换整个父节点-XML Transform

时间:2018-11-24 06:59:25

标签: xml xpath transform xml-document-transform

我需要标识子节点元素的文本值。

目的:

我想为XML文件创建Transform文件,因此我需要通过比较子节点 ClientKey

的值来替换父节点 Connection

我的XML文件:

<Connection>
     <ClientKey>Client1</ClientKey>
     <ConnectionString>Test</ConnectionString>
     <WorkingDocs>Test</WorkingDocs>
     <TemplateDocs>Test</TemplateDocs>
     <PatientDocs>Test</PatientDocs>
     <ClientName>Test</ClientName>
     <ClientTimeZone>Test</ClientTimeZone>
     <ClientTimeDiff>Test</ClientTimeDiff>
     <ExceptionLogPath>Test</ExceptionLogPath>
</Connection>

我如何识别 ClientKey 节点的文本

2 个答案:

答案 0 :(得分:0)

在谷歌搜索之后,我发现了这种情况下的Config Transform解决方案

我们有不同的方法

1. Condition(ClientKey/text()='Client1')
2. XPath(/Connections/Connection[ClientKey/text()='UHG_LOCAL'])

<Connection xdt:Transform="Replace" xdt:Locator="Condition(ClientKey/text()='Client1')">
    <ClientKey>GC_LOCAL</ClientKey>
    <ConnectionString>Test1</ConnectionString>
    <WorkingDocs>Test1</WorkingDocs>
    <TemplateDocs>Test1</TemplateDocs>
    <PatientDocs>Test1</PatientDocs>
    <ClientName>Test1</ClientName>
    <ClientTimeZone>Test1</ClientTimeZone>
    <ClientTimeDiff>Test1</ClientTimeDiff>
    <ExceptionLogPath>Test1</ExceptionLogPath>
</Connection>

答案 1 :(得分:0)

了解LINQ to XML可能会更有用。请查看https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml-overview

XML值可以存储在“元素”或“属性”下。请考虑下面的xml文件。

<Connection>
 <ClientKey Name = "KeyName" >Client1</ClientKey>
 <ConnectionString>Test</ConnectionString>
 <WorkingDocs>Test</WorkingDocs>
 <TemplateDocs>Test</TemplateDocs>
 <PatientDocs>Test</PatientDocs>
 <ClientName>Test</ClientName>
 <ClientTimeZone>Test</ClientTimeZone>
 <ClientTimeDiff>Test</ClientTimeDiff>
 <ExceptionLogPath>Test</ExceptionLogPath>

XElement Data = XElement.Load()//您的Xml参考在这里

  1. 要获取元素值: (客户端密钥是元素

字符串结果= data.Element(“ ClientKey”)。value

  1. 要获取属性值:(属性是ClientKey内的Name属性

字符串结果= data.Attribute(“名称”)。值