gpt4 book ai didi

namespaces - linq 到 xml 和命名空间

转载 作者:行者123 更新时间:2023-12-04 17:00:52 25 4
gpt4 key购买 nike

我总是很高兴有机会使用 linq 到 xml,然后我遇到了与命名空间相同的 PITA 问题。不知道我有什么问题,但我永远无法理解发生了什么。基本上我只需要获取 responseCode 元素的值,到目前为止我没有运气:(

<?xml version="1.0" encoding="IBM437"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:ActionResponse xmlns:ns1="http://cbsv.ssa.gov/ws/datatype">
<ns1:responseCode>0000</ns1:responseCode>
<ns1:responseDescription>Successful</ns1:responseDescription>
</ns1:ActionResponse>
</soapenv:Body>
</soapenv:Envelope>

最佳答案

LINQ to XML 中的命名空间处理得非常优雅,IMO。下面是一个例子:

XNamespace ns1 = "http://cbsv.ssa.gov/ws/datatype";
XDocument doc = XDocument.Load(...);
string code = doc.Descendants(ns1 + "responseCode")
.Select(x => (string) x)
.First();

如果您想从顶部向下工作,使用涉及的两个命名空间,那也可以:
XNamespace ns1 = "http://cbsv.ssa.gov/ws/datatype";
XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
XDocument doc = XDocument.Load(...);
string code = (string) doc.RootElement
.Element(soapenv + "Body")
.Element(ns1 + "ActionResponse")
.Element(ns1 + "responseCode");

为了清楚起见,没有什么会强制您使用与 XML 中的命名空间前缀相同的变量名称 - 为了清楚起见,我只是这样做了。

关于namespaces - linq 到 xml 和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com