假设XML数据中有一个元素: <abc:xyz:name attr="value"/>

我正在尝试用XmlReader阅读它。 问题是我得到了XmlException

':'字符,十六进制值0x3A,不能包含在名称中

我已经声明了“abc”命名空间。 我也尝试添加“abc:xyz”和“xyz”命名空间。 但这根本没有帮助。 我可以在解析之前替换一些文本,但可能会有一些更优雅的解决方案。 所以我该怎么做?

这是我的代码:

XmlReaderSettings settings = new XmlReaderSettings()
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("abc", "");
nsmgr.AddNamespace("xyz", "");
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);

// So this reader can't read <abc:xyz:name attr="value"/>
XmlReader reader = XmlReader.Create(path, settings, context);“

#1楼 票数:4

你真的可以期待Xml解析器解析正确的Xml。 在这种情况下,“Xml”没有正确形成,实际上不是 xml。

因此,您唯一的选择是对“Xml”进行一些文本修改,以使其成为可以解析的有效Xml

更好的是,如果可以的话,修复任何认为它生成Xml的东西,以便at真正生成正确的Xml。

#2楼 票数:3

XML实体属于单个命名空间,并且没有命名空间前缀的嵌套。

XmlReader抱怨,因为它看到一个冒号,并将前面的所有内容解释为前缀。 然后它会看到另一个冒号和barfs,因为元素名称不允许有冒号。

另外 - 为了清楚起见 - 当你调用nsmgr.AddNamespace()时,你传递的“abc”和“xyz”值是前缀 ,而不是命名空间。 命名空间是该方法的第二个arg。 在这两种情况下,命名空间都是空字符串。 不知道为什么你会这样做。

您需要退后一步,找出您认为在元素上需要两个名称空间的原因。 还有为什么你使用空名称空间的前缀。

#3楼 票数:1

元素只能属于一个名称空间,名称空间被定义为(基本上)一个字符串,通常是一个URL。 考虑到这一点,嵌套命名空间毫无意义。

您可以嵌套元素,但每个元素只属于一个名称空间,默认名称空间(无前缀)或与限定名称前缀关联的名称空间。

另一种思考命名空间的方法是回答“谁决定这个元素的含义?”的问题。 一旦你知道,你指定一个名称空间来代表“谁”。

命名空间用于消除节点的含义,例如,当您在xml文件中将来自不同源的两个元素组合在一起时。 如果您正在合并关于烹饪食谱统计数据和烹饪食谱本身的饼图数据,那么元素“馅饼”可能意味着两种不同的东西 - 饼图或饼图配方。 (确实如此,确实!)为了确保每个元素得到正确的处理(渲染图表,并消耗可食用的馅饼),xml应该在每个pie元素前面加上一个名称空间前缀,以显示它代表什么以及如何处理它。

在您的情况下,您在两个instnaces中使用空命名空间(这是默认设置),因此您可以简单地省略命名空间前缀。

  ask by Yegor translate from so

未解决问题?本站智能推荐:

2回复

如何读取具有命名空间的XPathDocument

我有以下示例XML文件: 我加载它并试着像这样读取它: 这将输出上面显示的完整XML。 不是我想要的(我想选择“下一步”节点的内容。 但是,如果我从XML中取出xmlns="abbr:SomeNSValue试,那么我得到了我想要的东西: 在我的真实场景中,我将XML提供给我,我
1回复

使用命名空间别名而不是XElement上的URI选择命名空间的XML节点属性

我正在尝试从严格命名的XML文档中查询一些信息,并且在查找也是命名空间的属性时遇到了一些麻烦。 XML看起来像: 我的目标是创建一个包含国家/地区代码和国家/地区名称的对象列表。 这对我现在有用: 这工作正常,但我想使用命名空间别名找到属性,而不是命名空间URI(只是因为),或者至
1回复

如何在XElement中使用特殊的“xml”命名空间前缀

我正在使用XElement在C#中构建XML文档,我正在尝试设置 这是我目前的尝试: 但它出来是这样的: 我理解这是怎么回事 - 当我想用作命名空间前缀时,我的代码使用“xml”作为命名空间URI。 我的问题是AFAICT“xml”名称空间前缀在某种程度上是隐式的,并且实际上没有与
5回复

如何到达命名空间xml文件中的节点?

我试图从XML文件中取出一个节点,这真是令人费解。 XML: 我尝试了以下代码: xmlNode始终为null,或者我在.SelectSingleNode上.SelectSingleNode异常。 我在这里想念什么?
2回复

.NET中XmlDocument中的命名空间、架构、元素和属性

我把它放在这里是因为我在尝试解决我自己的问题时在 StackOverflow 上看到了很多关于 XML 的问答,并认为一旦我找到它,我就会发布我发现的内容,以便当其他人需要一些 XML 帮助时,这可能会对他们有所帮助。 我的目标:创建一个包含以下 XML 声明、架构和命名空间信息的 XML 文档:
2回复

使用命名空间读取/写入XmlDocument

考虑以下具有名称空间的XmlDocument : 我写, 我想读取和修改以下标记(XPath)的值: //DataSources/DataSource/rd:DataSourceID //DataSources/DataSource/ConnectionProperties/D
1回复

使用XML命名空间针对C#中的架构创建和验证XML

我试图弄清楚如何针对C#中的模式验证XML。 如果XML很简单,并且不使用任何命名空间元素,那么一切似乎都很棒。 但是,如果它使用XML名称空间,我就会遇到问题。 我要生成的XML是: 我可以用等效于C#的形式生成此代码: 我可以尝试通过以下方式验证产生的XML文档: 验证的
1回复

使用相同的默认名称空间和命名空间序列化xml

我知道这似乎不是最佳实践,但我需要使用相同的名称空间生成xml 例如: 我还为序列化器添加了名称空间: 这是类本身: 因此,一切都很好,但是默认的xmlns不在生成的xml中。 我也玩过XmlWriterSettings,但没有结果。 有没有人知道如何在不替换字符串的情况下执