在两个节点之间获取节点

本文关键字:节点 之间 获取 两个 | 更新日期: 2023-09-27 18:34:38

我有以下格式的 Xml

<?xml version="1.0" encoding="UTF-8"?>
<htmlString>
<ACTION v="Search"/>
<KEY/>
<ACCOUNTNO v=""/>
<AGREEMENTREF1/>
<AGREEMENTREF2/>
<PAYMENTREF1/>
<PAYMENTREF2/>
<PROGRAM v="SOW03301"/>
<SESSION v="SF3gGV1J4501"/>
<OBJECT v="1"/>
<HTMLFILE v="CGIOTP000023/TEMP:WHTTP"/>
<PIPECOUNTER v="100000386"/>
</htmlString>

我需要将操作和会话之间的部分作为字符串。

<KEY/>
<ACCOUNTNO v=""/>
<AGREEMENTREF1/>
<AGREEMENTREF2/>
<PAYMENTREF1/>
<PAYMENTREF2/>
<PROGRAM v="SOW03301"/>

你能帮忙吗?提前谢谢。

在两个节点之间获取节点

你可以

XElement.ElementsAfterSelf来做到这一点:

string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<htmlString>
<ACTION v=""Search""/>
<KEY/>
<ACCOUNTNO v=""""/>
<AGREEMENTREF1/>
<AGREEMENTREF2/>
<PAYMENTREF1/>
<PAYMENTREF2/>
<PROGRAM v=""SOW03301""/>
<SESSION v=""SF3gGV1J4501""/>
<OBJECT v=""1""/>
<HTMLFILE v=""CGIOTP000023/TEMP:WHTTP""/>
<PIPECOUNTER v=""100000386""/>
</htmlString>";
var xd = XDocument.Parse(xml);
var elements = xd.Root.Element("ACTION")
    .ElementsAfterSelf()
    .TakeWhile(xe => xe.Name.LocalName != "SESSION")
    .Select(xe => xe.ToString());
var sbNew = string.Join(Environment.NewLine, elements);
Console.Write(sbNew);
Console.ReadLine();

指纹:

<KEY />
<ACCOUNTNO v="" />
<AGREEMENTREF1 />
<AGREEMENTREF2 />
<PAYMENTREF1 />
<PAYMENTREF2 />
<PROGRAM v="SOW03301" />