问题标签 [xmlreader]

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 投票
2 回答
29130 浏览

web-services - 在 WebService 调用中序列化字符串时出错

今天早上,我遇到了一个问题,即从 Web 服务调用返回一个文本字符串。我得到的错误如下

我进行了搜索,结果如下: 搜索结果

其中大多数与 WCF 相关,但足以为我指明正确的方向。我将发布答案作为回复。

0 投票
2 回答
5031 浏览

.net - 滥用 XmlReader ReadSubtree()

我需要解析一个 xml 文件,它实际上是一个非常大的树结构的图像,所以我使用 XmlReader 类来“动态”填充树。每个节点仅通过 ReadSubtree() 函数从其父节点传递它期望的 xml 块。这样做的好处是不必担心节点何时消耗了它的所有子节点。但现在我想知道这是否真的是一个好主意,因为可能有数千个节点,并且在阅读 .NET 源文件时,我发现每次调用 ReadSubtree 都会创建几个(可能更多)新对象,并且没有缓存可重用对象(我见过)。

也许 ReadSubtree() 没有被认为被大量使用,或者我只是什么都不担心,我只需要在解析文件后调用 GC.Collect() ......

希望有人可以对此有所了解。

提前致谢。

更新:

感谢您提供的精彩而有见地的答案。

我深入研究了 .NET 源代码,发现它比我最初想象的要复杂。我终于放弃了在这种情况下调用这个函数的想法。正如 Stefan 指出的那样,xml 阅读器永远不会传递给外人,我可以信任解析 xml 流的代码(由我自己编写),所以我宁愿强制每个节点对它们的数据量负责从流中窃取而不是使用最终不那么薄的 ReadSubtree() 函数来节省几行代码。

0 投票
1 回答
5347 浏览

.net - XmlReader - 将当前节点读取为字符串

在下面的代码片段中,当我遇到一个元素时,使用 XmlReader。我想按原样阅读它,包括元素中的所有属性和命名空间装饰。使用 oXml.Name 属性,我只能获取标签名称。是否有获取标签本身的功能?

我试过 oXml.ReadOuterXml() 但它返回元素及其子内容。这可能是可以接受的,但是当我刚刚从 ReadOuterXml 获得的元素已被解析时,我如何快进我的 XmlReader 以忽略后续的 XmlNodeType.Text 和 XmlNodeType.EndElement?

更新:对于以下代码片段,loc1 在 taglist 中,因此使用 ReadOuterXml 编写,但解析器无法获取以下“!” 特点。

0 投票
1 回答
20745 浏览

c# - XmlReader - 自关闭元素不会触发 EndElement 事件?

我在 .NET 中使用 XmlReader 使用循环解析 XML 文件:

我想知道以下 XML 代码不产生一些 EndElement 节点是否正常?请注意 /> 之前缺少的空格,但我认为这不是问题。

是否有不同的 NodeType 或属性来指示自闭合元素?

0 投票
2 回答
12263 浏览

c# - 在 XmlReader 中解析 XML 元素

我正在构建一个需要通过 XML 提要运行的应用程序,但在获取某些元素时遇到了一些麻烦。

我正在使用Twitter 提要并希望浏览所有<item>元素。我可以很好地连接并从提要中获取内容,但我不知道item在循环时如何仅选择元素reader.Read();

谢谢你的帮助!

0 投票
3 回答
1178 浏览

c# - 处理不良 xml 数据的正确方法

我有一个小的 c# windows 服务,它定期从 web 服务中提取 xml 并将数据存储在数据库表中。

不幸的是,它失败了,因为 Web 服务中偶尔会有错误的数据——字符串而不是小数。我对 Web 服务没有任何控制权(来自我们无法更改的软件的未经验证的用户输入),但我想记录错误数据以便重新输入。

这是看起来像这样的简单数据:

该表只有两列,COL1 (NUMBER, 10)、COL2 (NUMBER, 10,2)。

我正在使用验证 XmlReader 和这个 XSD:

然后是 dataset.ReadXml() 和 Update() 数据集。

每当遇到错误数据时,我都会收到以下异常:

System.Xml.Schema.XmlSchemaValidationException 未处理

Message="'COL1' 元素无效 - 根据其数据类型,值 'A40' 无效' http://www.w3.org/2001/XMLSchema:decimal ' - 字符串 'A40' 不是有效的十进制价值。”

我可以想出几种解决问题的方法,但它们都感觉有点笨拙,我想学习一些更优雅的东西,并提高我的知识。到目前为止,这是我想出的:

  • 在加载到验证 XML 阅读器之前预处理 Web 服务提供的 XML,完全删除任何坏节点。
  • 捕获 XmlSchemaValidationExceptions 并尝试从它们优雅地继续(不确定那个)
  • 不要使用验证 XML 阅读器,而是在将未经验证的 xml 加载到数据集时捕获异常。(再次不确定)
  • 在数据集中有字符串列,并忽略错误数据,直到我更新它,并捕获数据库拒绝的任何内容。
  • 去用大槌站在用户面前,直到他们学会第一次做对(太耗时)
  • 别的东西?

更新:数据可能很糟糕,因为它来自不验证 COL1 的用户输入的应用程序 - 但 COL2 中的数字计算正确,并且 COL1 应该对应于不同的系统。应记录任何无效条目,以便更正。数据写入数据库后,另一个系统会验证 COL1 是否有效,如果它在另一个系统中没有正确显示,用户很快就会发现 - 他们过去常常手动加载它:)

0 投票
1 回答
5290 浏览

c# - 告诉 StructureMap 使用特定的构造函数

我有两项服务需要XPathDocument. 我希望能够定义XPathDocumnet在两个服务的配置中使用的命名实例。我还希望能够告诉 StuctureMapXPathDocument使用哪个构造函数。当我尝试获取它的实例时,XPathDocument它告诉我它找不到XmlReader. 我想使用需要 xml 文件的字符串 uri 的构造函数。我似乎无法让它发挥作用。这是 StructureMap 配置代码。

0 投票
2 回答
2721 浏览

c# - XMLTextReader.ReadSubtree 返回 XMLTextReader

我正在使用 XMLTextReader 来处理 XML 文件(而不是 XMLDocument)。我使用 XMLTextReader,所以我可以使用忽略所有空格的选项。

在某些时候,我想使用 ReadSubtree 读取节点。这将返回一个 XMLReader。如何将其转换为 XMLTextReader,以便我可以使用忽略空格选项。

0 投票
1 回答
1113 浏览

c# - 自定义架构验证行为 - XmlReaderSettings

我正在使用带有事件处理设置的 XMLReaderSettings 对象使用 XMLReader 解析 XML,以在适当的情况下执行架构验证。

但是,似乎每个 XML 级别的错误捕获只发生一次。这意味着该级别的任何后续错误都将被忽略。

有什么方法可以让每次发生错误时触发错误处理事件。

编辑:我也尝试过 XmlSchemaValidator 但这不成功。仅捕获标签正文中的第一个错误。

0 投票
1 回答
4939 浏览

c# - 阅读 Stack Overflow RSS 提要

我正在尝试从提要中获取未回答问题的列表,但我无法阅读它。

我讨厌发布这样一个“请修复代码”的问题,但我真的被困住了。我已经尝试了几个教程(有些给出了编译错误)但没有帮助。我假设我使用 anXmlReader和 an的方式是正确的,XmlDocument因为这在每个指南中都很常见。