相关疑难解决方法(0)

在不知道命名空间的情况下使用LINQ搜索XDocument

有没有办法在不知道命名空间的情况下搜索XDocument?我有一个记录所有SOAP请求并加密敏感数据的进程.我想根据名字找到任何元素.有点像,给我所有名称为CreditCard的元素.我不关心命名空间是什么.

我的问题似乎是LINQ并且需要一个xml命名空间.

我有其他从XML检索值的进程,但我知道这些其他进程的命名空间.

XDocument xDocument = XDocument.Load(@"C:\temp\Packet.xml");
XNamespace xNamespace = "http://CompanyName.AppName.Service.Contracts";

var elements = xDocument.Root
                        .DescendantsAndSelf()
                        .Elements()
                        .Where(d => d.Name == xNamespace + "CreditCardNumber");
Run Code Online (Sandbox Code Playgroud)

我真的希望能够在不知道名称空间的情况下搜索xml,如下所示:

XDocument xDocument = XDocument.Load(@"C:\temp\Packet.xml");
var elements = xDocument.Root
                        .DescendantsAndSelf()
                        .Elements()
                        .Where(d => d.Name == "CreditCardNumber")
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我在编译时事先不知道名称空间.

如何才能做到这一点?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Request xmlns="http://CompanyName.AppName.Service.ContractA">
        <Person>
            <CreditCardNumber>83838</CreditCardNumber>
            <FirstName>Tom</FirstName>
            <LastName>Jackson</LastName>
        </Person>
        <Person>
            <CreditCardNumber>789875</CreditCardNumber>
            <FirstName>Chris</FirstName>
            <LastName>Smith</LastName>
        </Person>
        ...

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Request xmlns="http://CompanyName.AppName.Service.ContractsB">
        <Transaction>
            <CreditCardNumber>83838</CreditCardNumber>
            <TransactionID>64588</FirstName>
        </Transaction>      
        ...
Run Code Online (Sandbox Code Playgroud)

c# linq-to-xml

73
推荐指数
3
解决办法
6万
查看次数

标签 统计

c# ×1

linq-to-xml ×1