linq 名称中不能包含“:”字符(十六进制值0x3A

du7egjpx  于 2023-06-27  发布在  其他
关注(0)|答案(7)|浏览(245)

我有一个xml文件,它包含了它的元素,比如

<ab:test>Str</ab:test>

当我试图使用代码访问它时:

XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault();

它给了我一个错误:
System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.XML.XmlException:名称中不能包含“:”字符(十六进制值0x 3A)。
我应该如何访问它?

rmbxnbpk

rmbxnbpk1#

如果你想使用名称空间,LINQ to XML会让你变得非常简单:

XNamespace ab = "http://whatever-the-url-is";
XElement tempElement = doc.Descendants(ab + "test").FirstOrDefault();

在文档中查找xmlns:ab=...部分,找出URI“ab”所指的名称空间。

x9ybnkn6

x9ybnkn62#

尝试将您的命名空间放在{中... }类似:

string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
cx6n0qe3

cx6n0qe33#

我也犯了同样的错误。我发现我在添加代码...

var ab = "http://whatever-the-url-is";

但ab被确定为字符串。这导致OP报告的错误。我没有使用VAR关键字,而是使用实际的数据类型XNamespace...

XNamespace ab = "http://whatever-the-url-is";

问题就消失了

0pizxfdo

0pizxfdo4#

有一个Get方法的重载,您可能希望尝试它考虑命名空间。试试这个:

XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
nkkqxpd9

nkkqxpd95#

尝试从文档中获取命名空间

var ns = doc.Root.Name.Namespace;
bbuxkriu

bbuxkriu6#

删除AndroidManifest.xmlAndroidManifest.xml.DISABLED对我来说很有效。

xuo3flqw

xuo3flqw7#

当':'字符包含在命名空间中时,它会有问题。示例:

<?xml version="1.0"?>
  <SAMLConfiguration xmlns="urn:componentspace:SAML:2.0:configuration">
    <ServiceProvider Name="http://avanteam"
      Description="Avanteam Service Provider"
      AssertionConsumerServiceUrl="SAML/AssertionConsumerService"
      LocalCertificateFile="Certificates\sp.pfx"
      LocalCertificatePassword="password"/>
  </SAMLConfiguration>

一个适用于所有情况的解决方案是在XNamespace的示例上使用GetName方法。使用默认命名空间的示例:

var ns = doc.Root.GetDefaultNamespace();
var serviceProviderNode = doc.Element(ns.GetName("SAMLConfiguration"))?.Element(ns.GetName("ServiceProvider"));

相关问题