问题标签 [xml-1.1]
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.
web-services - 配置 CXF Web 服务客户端以读取 XML 1.1 响应
我正在使用 CXF 生成一个到 .NET Web 服务客户端的接口。但是,有时当我使用客户端时,会出现错误:
从网上的许多其他来源来看,很明显这是因为 Web 服务将其响应编码为 XML 1.1,而我的 CXF 客户端正在读取该响应,需要 XML 1.0,并且特殊字符 0x1b 在 XML 1.0 中是非法的。现在,当 WSDL 显然是 1.0(因为那是规范)时,我不想争论 .NET 服务是否应该在其响应中使用 XML 1.1。我只想能够阅读他们发送的内容而不会出错。
查看 CXF 客户端中的依赖项,他们使用 WoodStox 4.1.1,它(来自他们的站点)清楚地支持 XML 1.1。 我想知道的是,有没有办法配置我的 CXF 客户端(通过在 wsdl2java 时间或运行时绑定)在接收响应时使用 XML 1.1 解析器? 我能找到的只是人们说他们不应该使用 1.1,或者让服务器端过滤这些字符。请注意,我无法在客户端过滤字符,因为我必须将数据发送回服务器,并且验证会失败。
作为替代方案,我认为 .NET 服务可以以某种方式指定他们在响应中使用 XML 1.1,但我不控制该服务,因此为他们找出问题然后再找出问题会更麻烦建议他们修复它。另外,他们发送的数据在一个数据库中,所以它有 XML 1.1-only 字符不是 Web 服务的错。
java - java sax 解析器破坏 xml 1.1 的属性
我正在使用 java 的 sax 类来解析 xml 文件。如果 xml 文件显示 1.0 版,一切正常,但如果显示 1.1 版,则某些属性会被破坏,给我错误的结果,但不会引发任何异常。
我的 xml 文件基本上是这样的:
所以我期望,当我使用 sax 解析这个文件时,会找到 420 个 trkpt 标签,并且每个标签都有 lat 和 lon 属性。特别是,我希望找到 420 个“纬度”属性,它们都是“12.3456789”。
对于解析,我构造了一个处理程序对象并将其提供给该本地文件的流:
处理程序类扩展org.xml.sax.helpers.DefaultHandler
并且只有一种方法startElement
来响应 trkpt 标记的打开:
那么结果如何呢?如果 xml 文件的版本为 1.0,那么我看到的只是“完成”。找到了 420 个 trkpt 标签,它们都有两个属性,第一个总是被称为“lat”,这个属性的值总是以“1”开头,正如我所料。伟大的!
如果将 xml 文件更改为version="1.1"
在第一行指定,则会得到以下输出:
所以即使我所有的 420 点都应该相同,但其中两个给了我一个完全错误的属性值。不抛出异常。仍然找到了 420 个 trkpt,它们都有两个属性,称为“lat”和“lon”。奇怪的是,lon 值总是可以的。
我通过直接复制/粘贴第一个 trkpt 在文本编辑器中创建了这个 xml 文件,所以我确定所有值都是相同的,我确定 xml 文件中没有具有有趣属性值的点,而且我确保文件没有非 ascii 字符值或实体代码或任何其他奇怪的东西。
我已经在具有两个不同操作系统的三台不同机器上使用 Sun 的 JRE6、OpenJDK6 和 OpenJDK7 进行了尝试。所以要么我做错了什么,要么这个特定的 xml 文件与 xml1.1 不兼容,或者存在一个广泛存在的 sax 错误(这似乎不太可能,因为我认为它会影响很多人)。再次请注意,使用 xml1.0 一切正常。另请注意,数字 420 没有什么特别之处,只是如果文件只有 100 个条目,那么它们都会被正确解析。如果您有数千个条目,那么其中一定数量的条目会以这种方式破坏它们的第一个属性值。属性值的长度似乎总是正确的,但它会从文件中的错误点提取字符。也许索引溢出?
我尝试删除所有速度标签,但如果您有足够的 trkpts,问题仍然存在。它对额外的空格也很敏感,因此如果我在 trkpts 之间添加换行符,问题会出现在不同的点上或返回不同的属性值。
msxml - 哪个版本的 MSXML 开始支持解析 XML 1.1?
如果我使用 MSXML6.dll 解析 XML 1.1,我会得到这个错误:0xC00CE57F
MSG_E_INVALID_VERSION
版本号无效
XML 1.1 最初于 2004 年 2 月 4 日发布。我很惊讶 MSXML6.dll 无法解析它。
问题: 是否有任何 MSXML4/5/6.dll 支持 XML 1.1?
提前致谢。
.net - .Net 4.5 是否支持 XML 1.1(对于 XML 1.0 中无效的字符)?
这是在 Web 服务(客户端)的上下文中。我需要与后端系统 (Java) 交互,并且需要在
and
范围内传输一些控制字符。
我很清楚 XML 1.0 不支持这一点,但我很想知道 .NET 4 平台或 .NET 4.5 Web 服务框架是否支持 XML 1.1 中的对话。
xml - svg 文件中的 xml 1.0 和 1.1?
我有一个带有 xml 1.1 的文件,我需要使用 adobe illustrator 对其进行修改(我需要将所有标签“文本”转换为曲线)。
但是illustrator不打开xml 1.1,如果我将它修改为xml 1.0就会打开它。但是如果我这样做,那么一些标签将被错误地转换。
如何解决这个问题?
java - xml 1.1 在 xsd 中使用时导致 NullPointerException
我有一个 xsd 文件。我正在尝试javax.xml.validation.Schema
使用该 xsd 文件进行创建。我写了一个程序来做到这一点。当我使用<?xml version="1.0" encoding="UTF-8"?>
每件事时,一切正常。但是当我使用时<?xml version="1.1" encoding="UTF-8"?>
,第一次尝试创建的Schema
是抛出 NPE,但第二次和后续尝试都成功了。以下是来源:
首先执行的方法(doIt()
或doItAgain()
)是抛出 NPE。
下面是堆栈跟踪:
我的问题是,为什么 XML 1.1 不能正常工作?为什么只有第一次尝试不成功?
xml - 在 XML 1.1 中取消声明命名空间和“Prefix Declared”命名空间约束
例子
显然,这是一个有效的 XML 文档(从http://www.lenzconsulting.com/namespaces/复制)。
然而,它似乎违反了Namespace 1.1 规范中的“Prefix Declared”命名空间约束。
命名空间约束:前缀声明
命名空间前缀,除非它是 xml 或 xmlns,必须在命名空间声明属性中声明在使用前缀的元素的开始标记或祖先元素(即,其内容中出现前缀标记的元素)。此外,最里面的此类声明中的属性值不得为空字符串。
请注意最后一句“最里面的此类声明中的属性值不得为空字符串”以及它如何应用于上述文档元素中的my:
未声明。simple
这肯定是最里面的这样的声明吗?
我对此的解读是,您不能取消声明前缀,除非您有一个重新声明它的子元素。
问题
- 上述 XML 文档对于 Namespaces 1.1 是否有效?
- 如果是这样,我是如何误解规范的?答案能否给出满足和违反此约束的示例和反例?
- 如果不是,取消声明的价值是什么?
c# - C# XMLTextWriter - XML 1.1
我正在处理一个处理 C# 中字符串本地化的大型 XML 文件。我没有编写生成 XML 的程序,但我可以访问源代码并且我想修改它,因为它当前输出 1.0 作为版本,但它在文档中包含非法字符。
这是当前编写代码的方式。
但是WriteStartDocument()
文档声明它使用 XML 1.0 版。我知道这不起作用,因为我正在编写一个修改此 XML 的 java 解析器,并且它无法加载,因为它具有不允许的 unicode 字符。具体来说
,这似乎是取消。我不知道为什么会在这里……该文件大约有 500000 行长。
在我的 java 解析器将它抓取到 1.1 之前,我手动更改了标题,并且它起作用了。从技术上讲,我可以将 XML 修改为字符串,然后对其进行解析,但我宁愿使用适当的 XML。
我找不到任何方法来改变这一点。我无法真正更改该工具以使用其他形式的 XML 编写,因为它是一个共享的开源项目,而且我对 C# 的使用不是很好。
这有什么诀窍吗?
xml - 有关 XML 2.0 的信息
我需要用 XML 2.0 版构建一个 XML 文档。
我指定<?xml version="2.0"?>
. 但是还有什么需要不同的呢?谁能解释一下 XML 1.1 和 XML 2.0 之间的基本区别?
c# - XSLT 1.0 将十六进制 0x1C - 0x1F 输出到文本文件
我正在使用 xslt 1.0 版将 XML 文件转换为发送给第三方的文本文件。第三方格式要求数据字段用 0x1F(ascii 单位分隔符)分隔,组用 0x1D(ascii 组分隔符)分隔,记录用 0x1E(ascii 记录分隔符)分隔。在样式表中使用这些会导致以下错误。
字符 ' ',十六进制值 0x1D 在 XML 文档中是非法的。
我目前正在使用扩展字符集中的 0x80 到 0x82,然后通过 c# 中的替换函数运行转换结果,将我使用的值替换为我实际需要的值,但似乎应该有更好、更有效的方法去做这个。
有没有办法直接使用样式表将这些值输出到文本文件?
当前样式表
(...样式表继续附加段...)
电流输出(记事本++)
(...输出继续附加段...)
XML 示例
更新
对于那些可能正在寻找类似解决方案的人,我最终在样式表中使用了 C# 脚本。
然后可以像这样使用它:
您确实需要在加载XslCompiledTransform时使用XsltSettings设置EnableScript = true ,并在用于输出的XmlWriter上设置CheckCharacters = false :
感谢@Abel 为我指明了正确的方向。