¿Hay alguna forma de buscar un XDocument sin conocer el espacio de nombres? Tengo un proceso que registra todas las solicitudes SOAP y encripta los datos confidenciales. Quiero encontrar cualquier elemento basado en el nombre. Algo como, dame todos los elementos donde el nombre es CreditCard. No me importa cuál sea el espacio de nombres.
Mi problema parece estar en LINQ y requiere un espacio de nombres xml.
Tengo otros procesos que recuperan valores de XML, pero conozco el espacio de nombres para estos otros procesos.
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");
Realmente quiero tener la capacidad de buscar xml sin conocer los espacios de nombres, algo como esto:
XDocument xDocument = XDocument.Load(@"C:\temp\Packet.xml");
var elements = xDocument.Root
.DescendantsAndSelf()
.Elements()
.Where(d => d.Name == "CreditCardNumber")
Esto no funcionará porque no conozco el espacio de nombres de antemano en el momento de la compilación.
¿Cómo se puede hacer esto?
<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>
...