问题标签 [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.
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”的声明。
我通过(伪)设置了架构:
谁能解释我做错了什么?谢谢。
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 遍历?
xml - 从 WebService 中删除命名空间
我有一个从 flex 调用的 .Net Web 服务。我们的程序员在调用 Web 服务函数时收到以下 xml:
他想得到所有相同的东西,但没有命名空间,因为我们不需要它们。如何在 .Net 部分完成?
java - XPath 表达式对 //element 不返回任何内容,但 //* 返回一个计数
我将 XOM 与以下示例数据一起使用:
以下元素返回许多元素(来自真实数据):
但类似的东西
什么都不返回。如果我遍历根的孩子,数字似乎匹配,如果我打印元素名称,一切似乎都正确。
我正在获取 HTML,用 tagoup 解析它,然后从生成的字符串构建一个 XOM 文档。这其中的哪一部分会出现如此可怕的错误?我觉得这里发生了一些奇怪的编码问题,但我只是没有看到。Java 字符串是字符串,对吧?
c# - 使用带有 Xml 命名空间的 Linq to Xml
我有这个代码:
当我为 theXml 使用第一个值时,结果为空,而使用第二个值时,我有很好的值......
如何使用带有 xmlns 值的 Linq to Xml?
xml - 使用 XML::LibXML:如何创建命名空间和子元素并使它们一起工作?
我正在尝试用 FOAF 和 Perl 做一些事情。我对当前的解决方案不满意,我想推出自己的解决方案。请不要引用除XML::LibXML
.
作为参考,这里是 FOAF 文件的片段
现在,不包括空格,我正在尝试用XML::LibXML
. 但是,不幸的是,我被困在了第一行。这仅关注第一行:
我读到这是
- 元素
RDF
,在命名空间中rdf
声明rdf
命名空间xmlns
中具有值的属性http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs
命名空间xmlns
中具有值的属性http://www.w3.org/2000/01/rdf-schema#
foaf
命名空间xmlns
中具有值的属性http://xmlns.com/foaf/0.1/
admin
命名空间xmlns
中具有值的属性http://webns.net/mvcb/
首先你需要一个 element rdf:RDF
,这似乎很棘手。阅读我发现的文档,但这似乎并没有达到我想要的效果:XML::LibXML::Document
createElementNS()
现在,我尝试createElement('rdf:RDF')
并且它有效!我得到了根元素rdf:RDF
。这就是我们应该创建根元素的方式吗?我只是读错了 XML 吗?
现在,我需要创建属性(模式声明)。我尝试了记录不佳XML::LibXML::Document
的 'screateAttributeNS
但它也不起作用:
事实上我得到了这个错误:“不能在属性上创建一个新的命名空间!” 这似乎与方法名称的含义以及文档上的描述相矛盾:“创建绑定到命名空间的属性”。
所以,我想,好吧,我不能create
,attributeNS
也许我set
可以attributeNS
。而且,这次我继续使用下一个记录在案的方法,XML::LibXML::Element
它看起来适用:setAttributeNS
.
这次我得到一个不同的错误:“错误的 ns 属性!” . 所以我回顾了一些测试,发现这个需要一个属性键值而不是命名空间声明来做我想要的。这不是我想要的。
以下是一些可能的组合和输出:
似乎 *NS 方法都不起作用,即使我知道它们与 XML 命名空间有关。最后,我尝试了非 NS 版本:
我有一种可怕的感觉,我做的不对。我做对了吗?如何使用 DOM 添加子元素(不使用appendTextChild
)?
整个文档XML::LibXML
的文档很差,但似乎是 Perl 为使用 DOM 快速创建 XML 提供的最好的东西。
xml - 使用 perl 的 XML::LibXML 你如何使用 XML Prefixes 而不是 xmlns 属性?
我相信这个问题可能曾在 2006 年在不同的网站上尝试过。但是,我当前的 XML/RDF 编写器 ( XML::LibXML
1.70) 以 xmlns 属性的形式输出元素名称空间。这将排除使用非命名空间感知解析器的人,他们只是对foaf:Person
. 我想知道是否有人知道 perl 中实现这一目标的简单方法,首先,使用XML::LibXML
. 或者通过不同的方式。
像这样的节点:
和这个:
应该看起来像:
有任何想法吗?我相信无论哪种方式在技术上都是正确的,但我宁愿不依赖其他人知道这一点。昨天我自己都不知道。
xslt - 生成有效 XHTML 的 XSLT 转换:命名空间问题
我已经看到了这个资源链接文本,但我仍然无法使用 MSXML 解析器生成有效的 XHTML 文档。
我输入了以下文件:
因为我插入了指令,所以产生了讨厌的 xmlns="" :
在转换之前创建输入文档时。
XSLT 导入我用于捕获 html 元素的转换
在 _standard.xsl 我有进行相关转换的代码:
我仍然在 html 标记中没有所需的 xmlns:
而且我仍然在 html 代码中穿插了令人讨厌的 xmlns:
我哪里错了?
请注意:我必须使用拉模型进行转换,我不能使用身份转换
.net - WCF 合同 - 命名空间和序列化异常
我正在使用提供以下调用和响应的第三方 Web 服务
和
这是我写的合约和支持类型
然后我的客户看起来像这样
当我运行它时,我得到以下异常
无法使用 XmlSerializer 反序列化具有根名称“响应”和根命名空间“”的 XML 主体(用于操作“GetFoo”和合同(“IFooBarService”,“ http://tempuri.org/ ”))。确保将 XML 对应的类型添加到服务的已知类型集合中。
如果我从 中注释掉GetBar
操作IFooBarService
,它工作正常。我知道我在这里遗漏了一个重要的概念——只是不知道要寻找什么。构造我的合约类型以便正确反序列化它们的正确方法是什么?
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 属性):
现在终于,问题来了!!!客户端看不到任何数据——它看到的只是父元素,里面什么都没有。如果我在客户端代码中序列化回复对象,它看起来像这样:
所以,我的问题是:
为什么我的客户看不到回复文档的内容?
我如何解决它?
为什么我必须将 xmlns 属性放在子元素上,而不是传出文档中的父元素上?
这里有一些更可能相关的信息:
客户端代码(前命名空间)调用服务方法,如下所示:
添加命名空间后,我不得不将其更改为: