问题标签 [xml-namespaces]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3408 浏览

java - 为什么我的 JAXB Unmarshaller 找不到在导入模式中声明的元素?

我有两个具有循环依赖关系的模式 A 和 B(这是一个中间步骤)。我用作输入的 XML 文件根据 xmllint 和 Visual Studio 对架构进行验证。Eclipse 告诉我这两个模式都包含两个同名的全局组件。

A.xsd:

B.xsd:

我传递给 Unmarshaller 的 XSD 是 A.xsd。当它遇到 B.xsd 中定义的元素时,它会抱怨:

org.xml.sax.SAXParseException:cvc-elt.1:找不到元素“foo”的声明。

我通过(伪)设置了架构:

谁能解释我做错了什么?谢谢。

0 投票
1 回答
929 浏览

xml - 如何在 IE6..IE8 xml 文档中进行命名空间感知 DOM 遍历?

我正在实现一个与 SOAP 网络服务对话的 javascript 库。我使用 XMLHttpRequest 来做请求和接收响应。SOAP 响应严重依赖多个名称空间。

对于所有主流浏览器,除了所有版本的 Internet Explorer,我都可以使用getElementsByTagNameNS()andgetAttributeNS()来遍历和解析响应。但不在 Internet Explorer 中。

现在,我已经阅读了一些文档(http://msdn.microsoft.com/en-us/library/ms756048(VS.85).aspx),这些文档表明如果您首先设置SelectionNamespace属性,您实际上可以如何使用命名空间感知 XPath DOM 文档。仅当您知道要考虑的名称空间 uri(这是合理的)以及文档碰巧使用的名称空间前缀时,这才有效。

最后一个要求似乎完全不合理——我怎么知道碰巧使用了哪些命名空间前缀?我首先认为我可以完全遍历文档并跟踪所有命名空间和前缀,但问题是前缀/uri 关联对于整个文档来说并不是固定的,任何元素都可能在文档中的任何位置重新定义这些关联。我想到的另一种方法是在评估我的 XPath 表达式之前搜索上下文节点的所有祖先,以发现哪些前缀/命名空间组合对该节点有效,我认为如果我可以保证所有 XPath 表达式都是串行执行而不是并行执行。

有没有更好的办法?人们在 IE 中使用什么来进行命名空间感知 DOM 遍历?

0 投票
1 回答
3436 浏览

xml - 从 WebService 中删除命名空间

我有一个从 flex 调用的 .Net Web 服务。我们的程序员在调用 Web 服务函数时收到以下 xml:

他想得到所有相同的东西,但没有命名空间,因为我们不需要它们。如何在 .Net 部分完成?

0 投票
1 回答
1986 浏览

java - XPath 表达式对 //element 不返回任何内容,但 //* 返回一个计数

我将 XOM 与以下示例数据一起使用:

以下元素返回许多元素(来自真实数据):

但类似的东西

什么都不返回。如果我遍历根的孩子,数字似乎匹配,如果我打印元素名称,一切似乎都正确。

我正在获取 HTML,用 tagoup 解析它,然后从生成的字符串构建一个 XOM 文档。这其中的哪一部分会出现如此可怕的错误?我觉得这里发生了一些奇怪的编码问题,但我只是没有看到。Java 字符串是字符串,对吧?

0 投票
4 回答
49202 浏览

c# - 使用带有 Xml 命名空间的 Linq to Xml

我有这个代码:

当我为 theXml 使用第一个值时,结果为空,而使用第二个值时,我有很好的值......

如何使用带有 xmlns 值的 Linq to Xml?

0 投票
1 回答
5557 浏览

xml - 使用 XML::LibXML:如何创建命名空间和子元素并使它们一起工作?

我正在尝试用 FOAF 和 Perl 做一些事情。我对当前的解决方案不满意,我想推出自己的解决方案。请不要引用除XML::LibXML.

作为参考,这里是 FOAF 文件的片段

现在,不包括空格,我正在尝试用XML::LibXML. 但是,不幸的是,我被困在了第一行。这仅关注第一行:

我读到这是

  1. 元素RDF,在命名空间中rdf声明
    1. rdf命名空间xmlns中具有值的属性http://www.w3.org/1999/02/22-rdf-syntax-ns#
    2. rdfs命名空间xmlns中具有值的属性http://www.w3.org/2000/01/rdf-schema#
    3. foaf命名空间xmlns中具有值的属性http://xmlns.com/foaf/0.1/
    4. admin命名空间xmlns中具有值的属性http://webns.net/mvcb/

首先你需要一个 element rdf:RDF,这似乎很棘手。阅读我发现的文档,但这似乎并没有达到我想要的效果:XML::LibXML::DocumentcreateElementNS()

现在,我尝试createElement('rdf:RDF')并且它有效!我得到了根元素rdf:RDF。这就是我们应该创建根元素的方式吗?我只是读错了 XML 吗?

现在,我需要创建属性(模式声明)。我尝试了记录不佳XML::LibXML::Document的 'screateAttributeNS但它也不起作用:

事实上我得到了这个错误:“不能在属性上创建一个新的命名空间!” 这似乎与方法名称的含义以及文档上的描述相矛盾:“创建绑定到命名空间的属性”。

所以,我想,好吧,我不能createattributeNS也许我set可以attributeNS。而且,这次我继续使用下一个记录在案的方法,XML::LibXML::Element它看起来适用:setAttributeNS.

这次我得到一个不同的错误:“错误的 ns 属性!” . 所以我回顾了一些测试,发现这个需要一个属性键值而不是命名空间声明来做我想要的。这不是我想要的。

以下是一些可能的组合和输出:

似乎 *NS 方法都不起作用,即使我知道它们与 XML 命名空间有关。最后,我尝试了非 NS 版本:

我有一种可怕的感觉,我做的不对。我做对了吗?如何使用 DOM 添加子元素(不使用appendTextChild)?

整个文档XML::LibXML的文档很差,但似乎是 Perl 为使用 DOM 快速创建 XML 提供的最好的东西。

0 投票
1 回答
2402 浏览

xml - 使用 perl 的 XML::LibXML 你如何使用 XML Prefixes 而不是 xmlns 属性?

我相信这个问题可能曾在 2006 年在不同的网站上尝试过。但是,我当前的 XML/RDF 编写器 ( XML::LibXML1.70) 以 xmlns 属性的形式输出元素名称空间。这将排除使用非命名空间感知解析器的人,他们只是对foaf:Person. 我想知道是否有人知道 perl 中实现这一目标的简单方法,首先,使用XML::LibXML. 或者通过不同的方式。

像这样的节点:

和这个:

应该看起来像:

有任何想法吗?我相信无论哪种方式在技术上都是正确的,但我宁愿不依赖其他人知道这一点。昨天我自己都不知道。

0 投票
3 回答
2361 浏览

xslt - 生成有效 XHTML 的 XSLT 转换:命名空间问题

我已经看到了这个资源链接文本,但我仍然无法使用 MSXML 解析器生成有效的 XHTML 文档。

我输入了以下文件:

因为我插入了指令,所以产生了讨厌的 xmlns="" :

在转换之前创建输入文档时。

XSLT 导入我用于捕获 html 元素的转换

在 _standard.xsl 我有进行相关转换的代码:

我仍然在 html 标记中没有所需的 xmlns:

而且我仍然在 html 代码中穿插了令人讨厌的 xmlns:

我哪里错了?

请注意:我必须使用拉模型进行转换,我不能使用身份转换

0 投票
2 回答
1693 浏览

.net - WCF 合同 - 命名空间和序列化异常

我正在使用提供以下调用和响应的第三方 Web 服务

这是我写的合约和支持类型

然后我的客户看起来像这样

当我运行它时,我得到以下异常

无法使用 XmlSerializer 反序列化具有根名称“响应”和根命名空间“”的 XML 主体(用于操作“GetFoo”和合同(“IFooBarService”,“ http://tempuri.org/ ”))。确保将 XML 对应的类型添加到服务的已知类型集合中。

如果我从 中注释掉GetBar操作IFooBarService,它工作正常。我知道我在这里遗漏了一个重要的概念——只是不知道要寻找什么。构造我的合约类型以便正确反序列化它们的正确方法是什么?

0 投票
1 回答
310 浏览

web-services - 在 XSD 中引入 targetNamespace 后,客户端不再从 Web Service 获取数据

抱歉,如果这篇文章中有太多信息 - 在我解决实际问题之前有很多故事。我想我会包括所有可能相关的内容,因为我不知道出了什么问题。

我有一个有效的 Web 服务和客户端(均使用 VS 2008 用 C# 编写)用于将产品数据传递到电子商务网站。XSD 是这样开始的:

ETC

这是从客户端发送到服务的示例文档:

然后,我必须给服务一个 targetNamespace。实际上我不知道我是否“必须”设置它,但我添加(到同一个 VS 项目)一些代码作为客户端到一个完全不相关的服务(也没有命名空间),并且项目不会构建直到我给我的服务一个命名空间。

现在 XSD 是这样开始的:

ETC

正如您在上面看到的,我还更新了所有 xs:element ref 属性,为它们赋予“ecom”前缀。现在项目再次构建。

我发现客户在此之后需要进行一些修改。客户端使用 SQL 存储过程来生成 XML。然后将其反序列化为服务“get_data”方法的正确类型的对象。该对象的类型曾经是“eur”,但在更新对服务的 Web 引用后,它变成了“get_dataEur”。果然,必须将 XML 中的父元素更改为“get_dataEur”才能被接受。然后奇怪的是,我还不得不将包含我的命名空间的 xmlns 属性放在“sec”元素(父元素的直接子元素)而不是父元素上。这是现在从客户端发送到服务的示例文档:

如果在服务的 get_data 方法中我序列化传入的对象,我会看到这个(父元素是“eur”,xmlns 属性在父元素上):

然后,该服务准备回复以返回给客户端。XML 看起来像这样(发回的重要数据是 last_sent 元素中的 date_stamp 属性):

现在终于,问题来了!!!客户端看不到任何数据——它看到的只是父元素,里面什么都没有。如果我在客户端代码中序列化回复对象,它看起来像这样:

所以,我的问题是:

  1. 为什么我的客户看不到回复文档的内容?

  2. 我如何解决它?

  3. 为什么我必须将 xmlns 属性放在子元素上,而不是传出文档中的父元素上?

这里有一些更可能相关的信息:

客户端代码(前命名空间)调用服务方法,如下所示:

添加命名空间后,我不得不将其更改为: