使用 C# 从子子项中获取 Xml 内容到字符串中

Get Xml content into a string from a subchild using c#

这是我第一次发帖,我对 C# 还很陌生,所以非常感谢您的帮助。我有这么多接近我需要的代码的变体,但我不能自己得到。

我正在尝试使用 C# 在 XML 字符串中获取子项的内容。这是我收到的刺痛:

<?xml version="1.0" encoding="UTF-8"?>
<activation>
    <activationOutput>
        <AID>7706a84f-5sef5-4b49-891c-98414ebb61d5</AID>
        <protectionKeyId>18305465463798407</protectionKeyId>
        <activationString>encoded xml string</activationString>// What I need
    </activationOutput>
    <activationInput>
        <activationAttribute>
              <attributeName></attributeName>
              <attributeValue></attributeValue>
              <isvPermission></isvPermission>
              <endUserPermission></endUserPermission>
        </activationAttribute>
        <activationAttribute>
           <attributeName></attributeName>
                <attributeValue></attributeValue>
        </activationAttribute>
        <comments></comments>
    </activationInput>
</activation>

我需要将 activationString 值输出到一个字符串中。拥有其他元素会很好,但我只关心进入一个名为 v2c 的字符串。标签之间的信息是另一个编码的 XML 字符串。

我首先将 sting 放入 XML 元素中,使用:

XElement rootActivation = XElement.Parse(encodedActivationResponse, LoadOptions.SetLineInfo);

让我难过的是如何将子子作为字符串取出来。使用 XElement 元素获取 ActivationOutput 下所有子项的值,但我只需要最后一个。

string activationOutput = rootActivation.Element("activationOutput").Value;

它向我发送了一个无法使用的长字符串

7706a84f-5sef5-4b49-891c-98414ebb61d518305465463798407encodedxmlstring

我也试过:

IEnumerable<XElement> activationString = rootActivation.Elements("activationString");

看起来很有希望,但我不知道如何将值作为字符串输出。它显示为

{System.Xml.Linq.Extenstions.GetDescendantsXElement>}

我希望我可以获取变量并将其推入字符串,使用:

string v2c = activationString.ToString;

但这也行不通

如果这是唯一一个名为 activationString 的元素,您就可以这样做

string activationString = XDocument.Parse("xmlFilePathHere").Descendents("activationString").FirstOrDefault().Value;

你的尝试

string activationOutput = rootActivation.Element("activationOutput").Value;

确实为您提供了作为 <activationOutput> 子节点的所有 text() 节点的串联。显然,这不是你想要的。

单独获取 <activationString>text() 节点使用

string activation = 
  (string)rootActivation.Element("activationOutput").Element("activationString").Value;

这种方法的一个限制是:它只获取每个元素中的第一个。

在VB.Net

    Dim rootActivation As XElement
    'for testing
    rootActivation = <activation>
                         <activationOutput>
                             <AID>7706a84f-5sef5-4b49-891c-98414ebb61d5</AID>
                             <protectionKeyId>18305465463798407</protectionKeyId>
                             <activationString>encoded xml string</activationString>
                         </activationOutput>
                         <activationInput>
                             <activationAttribute>
                                 <attributeName></attributeName>
                                 <attributeValue></attributeValue>
                                 <isvPermission></isvPermission>
                                 <endUserPermission></endUserPermission>
                             </activationAttribute>
                             <activationAttribute>
                                 <attributeName></attributeName>
                                 <attributeValue></attributeValue>
                             </activationAttribute>
                             <comments></comments>
                         </activationInput>
                     </activation>

    Dim activationString As String = rootActivation.<activationOutput>.<activationString>.Value