【发布时间】:2021-11-23 10:09:30
【问题描述】:
我有一个生成的 XML,需要提取属性属性和 BooleanValues
{<l7:Resource xmlns:l7="http:not shown for security reasons">
<l7:TrustedCertificate id="not shown for security reasons" version="0">
<l7:Name>not shown for security reasons</l7:Name>
<l7:CertificateData>
<l7:IssuerName>not shown for security reasons</l7:IssuerName>
<l7:SerialNumber>not shown for security reasons</l7:SerialNumber>
<l7:SubjectName>not shown for security reasons</l7:SubjectName>
<l7:Encoded>not shown for security reasons</l7:Encoded>
</l7:CertificateData>
<l7:Properties>
<l7:Property key="revocationCheckingEnabled">
<l7:BooleanValue>true</l7:BooleanValue>
</l7:Property>
<l7:Property key="trustAnchor">
<l7:BooleanValue>true</l7:BooleanValue>
</l7:Property>
<l7:Property key="trustedAsSamlAttestingEntity">
<l7:BooleanValue>false</l7:BooleanValue>
</l7:Property>
<l7:Property key="trustedAsSamlIssuer">
<l7:BooleanValue>false</l7:BooleanValue>
</l7:Property>
<l7:Property key="trustedForSigningClientCerts">
<l7:BooleanValue>true</l7:BooleanValue>
</l7:Property>
<l7:Property key="trustedForSigningServerCerts">
<l7:BooleanValue>false</l7:BooleanValue>
</l7:Property>
<l7:Property key="trustedForSsl">
<l7:BooleanValue>false</l7:BooleanValue>
</l7:Property>
<l7:Property key="verifyHostname">
<l7:BooleanValue>false</l7:BooleanValue>
</l7:Property>
</l7:Properties>
</l7:TrustedCertificate>
</l7:Resource>}
我尝试了很多解决方案,例如
public static void GetPropertiesWithAttributes(XElement certlist, XNamespace ns, IEnumerable<XElement> certProperties)
{
var propellor = from prop in certlist.Elements(ns + "Properties").Take(10)
select new
{
propAtt = (string)prop.Elements(ns + "Property").SingleOrDefault(PropertyElement => PropertyElement.Attribute(ns + "Key").Value == "trustAnchor"),
propBool = prop.Element(ns + "BooleanValue").Value
};
foreach (var value in propellor)
{
Console.WriteLine($"IENUMERABLE: {value}");
}
}
所以我需要提取像“trustAnchor”这样的属性和像“true”这样的BooleanValue。为了获得商店中所有证书的列表。 但它们都导致null。所以我在所有情况下都犯了同样的错误。任何想法如何使这项工作?
【问题讨论】:
-
创建类并将你的 xml 反序列化为它,你会得到任何你想要的。
-
你可以像这样使用xml反序列化器c-sharpcorner.com/article/simple-xml-parser-in-C-Sharp
-
感谢您对反序列化的建议。我也试过了,但它无法处理大量数据,尤其是 base64 字符串,它非常大。
标签: c# xml linq namespaces