问题标签 [xmltextreader]

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 回答
86 浏览

c# - 文档光标的路径是什么?

我正在使用System.Xml.XmlTextReader只进阅读器。调试时,我可以随时查看属性LineNumberLinePosition查看光标的行号和列号。有什么方法可以在文档中看到光标的任何“路径”?

例如,在以下 HTML 文档中,如果光标位于 *,则路径将类似于html/body/p. 我会发现这样的东西真的很有帮助。

编辑:我也希望能够进行XmlWriter类似的检查。

0 投票
2 回答
2082 浏览

c# - 无法使用 xmlTextReader 读取 RSS 提要 - “名为‘链接’的列已属于此数据表”

多年来,我一直在使用 xmlDataReader 来读取 RSS,但突然之间,我使用的两个提要引入了一个额外的行,这会导致 xmlDataReader 解析器出错。

问题是这里的第二行与第一行冲突:

解析器认为 atom:link 元素是 link 元素的副本。我个人并不需要 atom:link 行,但是当我使用流时,我看不到任何删除此行或删除冒号的方法(这将解决问题)。

我怎样才能摆脱流中的冒号,以便内置解析器再次工作?

0 投票
3 回答
2466 浏览

c# - 读取巨大的 xml 元素值后清理内存

我很少来这里寻求帮助,但这让我发疯:我正在读取一个包含任意数量项目的 xml 文件,每个项目都有一个 b64 编码文件(以及一些随附的元数据)。XmlDocument最初我只是把整个文件读入一个XmlDocument. 所以我重写了代码来代替使用XmlTextReader,如果问题是程序被发送了一个带有大量大小合理的附件的 xml 文件,这很好用......但仍然存在一个大问题,这就是我转向你的地方:

如果我的 xml 阅读器位于 File 元素上,该元素包含一个巨大的值(例如,500MB),我调用reader.ReadElementContentAsString(),我现在有一个占用 500MB 的字符串(或者可能是 OutOfMemoryException)。在这两种情况下,我想做的只是写入日志,“那个文件附件太大了,我们将忽略它并继续前进”,然后转到下一个文件。但似乎我刚刚尝试读取的字符串并没有被垃圾收集,所以实际发生的是字符串占用了所有 RAM,并且之后它尝试读取的每个其他文件也会引发 OutOfMemoryException,即使大多数的文件将非常小。

回想一下:此时,我正在将元素的值读入本地字符串,所以我预计它会立即有资格进行垃圾收集(因此最迟在程序尝试阅读下一项并发现它没有可用的内存)。但是我已经尝试了一切,以防万一:将字符串设置为null,调用显式GC.Collect()......没有骰子,任务管理器指示GC只收集了大约40k,它刚刚请求存储字符串的~500MB,我仍然会出现内存不足异常尝试读取其他内容。

似乎没有任何方法可以在XmlTextReader不读取该元素的情况下知道 xml 元素中包含的值的长度,所以我想我一直在阅读字符串......我错过了什么,或者真的没有如何从 xml 文件中读取一个巨大的值而不完全破坏你的程序之后做任何事情的能力?我要疯了。

我读过一些关于 C# 的 GC 和 LOH 的内容,但我读到的任何内容都不会向我表明这会发生......

如果您需要任何进一步的信息,请告诉我,谢谢!

编辑:我确实意识到该进程是作为 32 位进程运行的,这意味着它比应有的更多地缺乏内存。解决了这个问题,这不再是一个问题,但它仍然是我想修复的行为。(需要更多和/或更大的文件才能达到抛出 OutOfMemoryException 的点,但是一旦抛出,我似乎仍然无法及时回收该内存。)

0 投票
1 回答
1033 浏览

c# - C# 在 XML 中去除 HTML 标记

我真的希望有人可以帮助我解决这个问题。解决方案应该在 C# 上。

我有一个大小为 36 MB 和 900k 行的 xml 文件。在某些节点上,它有很多 html 标记和一些无效标记,例如

我尝试了不同的方法来清理这个文件,但只有一种方法能够执行该任务,但是,由于这是在 Web 应用程序上执行的,它阻塞了应用程序并且需要大约 6 分钟才能完成任务并消耗大约 450MB记忆。

由于此文件是无效的 xml,我无法使用 XmlTextReader。使用 XLST,基于使用 XSLT 从 XML 中去除类似 HTML 的字符(不是标记)?,奇怪的是我也遇到了 HTML 实体的问题。

有效的过程(经过一些调整)如下http://www.codeproject.com/Articles/19652/HTML-Tag-Stripper

谢谢

编辑:

按照凯文的建议。我正在尝试使用 HTML Agility Pack 构建解决方案。至少要做一些基准测试。但是我被困住了。想象以下 xml 节点:

如何剥离“obs”标签内的标签,保留标签“obs”并保留文本“I WANT THIS TEXT”?基本上是这样的:

现在这是我的代码:

谢谢 :)

编辑 2

好的,我能够完成任务。然而,这需要太多时间。大约 3 小时,消耗 800MB 内存。

仍然需要帮助!

这是代码,它可能对某人有所帮助。

0 投票
3 回答
507 浏览

c# - 使用 XmlTextReader 在 c# 中处理尴尬的 XML 布局

所以我有一个 XML 文档,我试图在 C# 中使用 XmlTextReader 导入,并且我的代码运行良好,除了一个部分,即标记行与实际文本/内容不在同一行,例如使用 product_name:

我尝试对 XML 文档进行排序的代码如下:

我已经尝试了几乎所有在 XmlTextReader 文档中找到的东西

以及其他一些不太有意义的,但似乎没有一个能够始终如一地处理这个问题。显然我可以修复这个案例,但它会打破常规案例。所以我的问题是,在我找到“product_name”标签后,有没有办法让它转到包含文本的下一行并提取它?

我应该提到,之后我将它输出到 HTML 表中,并且元素出现空白,所以我相当确定它没有正确读取它。

提前致谢!

0 投票
2 回答
538 浏览

c# - Get two different attributes from an Xml File

I have an Xml File that looks like this:

What I want is to be able to create and object that contains two Objects which have a name and a key.

This is what I have so far:

But what I want it to do is to take every two SomeObject created with a name and a value to create a OtherObject that contains two someObject.

0 投票
2 回答
5423 浏览

xml - VB.net 读取编码错误的 XML 文件

我一直在寻找几个小时现在没有成功!

我有一个 XML 文件(由程序创建),我喜欢从中获取信息。现在,我的问题是,文件的标题是 UFTF-8,但文件是用 UNICODE 编码的!VB.net XmlTextReader 不会读取该文件...!?一旦它到达“加载”,它就会抛出异常。然后我在 Notepad++ 中打开了数千个 XML 文件中的一个,并将其保存为 UFT-8 - 好吧,猜猜看!该文件有效!

但我不认为我想更改我们服务器上的所有文件(每天都会添加新文件!)而且我认为我不能让开发人员更改他保存这些 XML 文件的方式。

关于如何“欺骗”VB.net 读取这些文件的任何想法?

谢谢!

0 投票
1 回答
1550 浏览

c# - XmlTextReader,跳过同名子节点的节点

我有来自第 3 方的 xml 文件。因为 xml 文件很大(40MB),所以我使用 XmlTextReader 逐步解析文件,使用这种方式:

通常节点的结构为<Cities><City/></Cities>,一切正常,但有些节点包含与其父节点同名的子节点:

在这种情况下如何选择正确的节点来解析唯一的子节点,以及如何使用 XmlTextReader.Skip() 跳过父节点,如顶级节点及其所有子节点?如果我跳过它,它无论如何都会读儿童。

0 投票
1 回答
175 浏览

c# - c# 在列表中添加字符串> 使用 XmlTextReader

好的,我有一个List我想从 Xlm 文件中添加一些数据的地方。我的List样子是这样的:

我的 Xml 文件如下所示:

我想要的是从 xml 文件中读取,每次读取时都XmlNodeType.Text将其添加到列表中。但是我该如何添加让我们说当我在第一个XmlNodeType.Text字符串中找到第一个时,然后当我XmlNodeType.Text在列表的第二个字符串中读取第二个时......我现在正在做的是:

有没有办法避免使用这种丑陋的东西switch(count)

0 投票
2 回答
2871 浏览

c# - 在 C# 中更改 XML 文件的属性值

如何使用我的源代码更改属性“id”?

我看到了一些例子,但他们使用了另一种不适用于我的方法。(我是菜鸟)