问题标签 [xmldocument]

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 投票
4 回答
2775 浏览

c# - 什么是适合 Web 服务的 XML 类型?

当前实施

Sql Server 2005 数据库带有一个名为 messages 的表和一个名为 MessageXml 的 xml 类型的列。

具有 Linq to Sql 类的 C# 库项目,该类生成一个名为 Message 的类,其中包含一个名为 MessageXml 的 XElement 类型的字段。

WCF Web 服务公开一个 MessagePayload 类,该类具有一个名为 MessageXml 的 XElement 类型的属性。

该网络服务不提供我由 Linq to Sql 创建的 Message 类。我使用一个轻量级的物体作为中间人。

问题

XElement 真的是我想在 WCF 服务中使用的类型,还是有更好的类型。打算传递给服务的 xml 应该是一个完整的文档。此外,我在将 xml 文档作为 XElement 加载时遇到了一些麻烦。我认为我应该在服务的轻量级类中公开一个完整的 xml 文档类型,但我对 XDocument 和 XmlDocument 之间的区别有点困惑。

最重要的是,我无法使用 XDocument 类型的属性公开 WCF Message 类,因为它包含无法序列化的 XDeclaration 类型的属性。

如果我使用 XmlDocument,那么我必须在 Linq 类和轻量级类之间的翻译中对 xml 类型进行这种奇怪的转换。

XmlDocument 似乎是正确的,我知道我必须做一些翻译,但希望尽可能接近合适。

0 投票
3 回答
1201 浏览

c# - 将节点添加到非默认命名空间会导致重复的限定符

我正在重写一个现有的 XmlDocument,其中包含一个定义了新的默认命名空间的元素(见下文,assemblyBinding 元素)

我需要能够将新节点添加到此“assemblyBinding”元素,而无需它们重新限定命名空间(因为.net 运行时在将生成的文件视为 app.config 文件时认为 Xml 无效)。

这就是我要的:

... 'dependentAssembly' 元素继承了其父元素的命名空间。

在调用 XmlDocument.CreateElement("dependentAssembly"); 或 XmlDocument.CreateElement("dependentAssembly", "urn:schemas-microsoft-com:asm.v1"); 或 XmlDocument.CreateElement("asm", "dependentAssembly", "urn:schemas-microsoft-com:asm.v1");

我不断得到这样的东西......

我需要做什么才能得到我想要的?

0 投票
4 回答
4328 浏览

c# - C# XmlDocument 节点

我正在尝试访问 UPS 跟踪信息,根据他们的示例,我需要像这样构建一个请求:

我在 C# 中使用 1 XmlDocument 创建它时遇到问题。当我尝试添加第二个: <?xml version="1.0" ?> or the <TrackRequest> 它会引发错误:

System.InvalidOperationException:此文档已经有一个“DocumentElement”节点。

我猜这是因为标准的 XmlDocument 只有 1 个根节点。有任何想法吗?

到目前为止,这是我的代码:

0 投票
3 回答
15798 浏览

c# - 序列化 XmlDocument 并通过 HTTPWebRequest 发送

我试图弄清楚如何正确序列化我的 XmlDocument 并通过 HTTPWebRequest 对象发送它。

到目前为止,这是我所拥有的:

有几件事我不确定。我有 2 个 XmlDocuments 我需要在同一个 HTTPWebRequest 中发送。我之前尝试过将 XmlDocuments 转换为字符串并将它们连接起来(以发送字符串),但是当我使用 StringBuilder / Writer 时,它添加了:

我已经在我的 XmlDocument 对象中有声明,所以现在它在那里两次,我不能<string...在那里拥有该部分。将 XmlDocuments 转换为字符串然后将它们连接起来并发送它是否更容易,或者是否有一种简单的方法可以按原样发送 XmlDocuments?

编辑:

请参阅C# XmlDocument 节点 当我尝试将我的 XmlDocument 之一转换为字符串时,它显示为

我希望我的根是<TrackRequest>

0 投票
2 回答
717 浏览

asp.net - 带有 Xml 文档的大型对象堆

这可能与.NET 集合和大对象堆 (LOH) 类似

在 .Net 中,我正在加载一个带有字符串的 XmlDocument,当 xml 转换为 base64 时,该字符串会生成约 200KB 的文本文档。关键是,字符串应该分配给大对象堆。我从这里的阅读比较中知道 XmlReader 是读取字符串的最有效方式,但 XmlDocument 可能让我更直接地阅读,具有更多功能(xpath)。

我的 XML 的每个节点都应该是一个相当小的字符串,几乎没有指向大型对象堆。使用 Lutz .Net Reflector 似乎 XmlDocument 在内部使用链接节点。

最后,我的问题是:在使用 XmlDocument 时,加载这个节省了 ~200 KB(>85000 字节)的字符串是否会导致另一个对象指向 LOH。我们有点担心会导致堆碎片化并导致 OOM 错误。还是 XmlDocument 只是碰巧(至少对于我要询问的数据的情况)为托管堆创建了很多对象?

0 投票
1 回答
325 浏览

xml - 读取xml流

很抱歉再次提出类似的问题,我正在尝试阅读以下 XML 文档:

有 4 个玩家,每个玩家都有我想要的值,但我只能获得相同的状态,而不是每个玩家的个人状态。请有人可以帮助我。非常感谢

0 投票
3 回答
108 浏览

c# - xml和磁盘上的文件交互

自从我需要这样做已经有一段时间了,所以我正在研究将 XMLDocument 从代码写入文件的老式方法。

在我的应用程序中,我正在使用新元素和值向 XML 文档写入大量内容,并定期将其保存到磁盘上,并根据我正在做的事情从文件中读取数据。

我正在使用 File.Exists(...) _xmldoc.LoadFile(..) 等方法...

我想知道现在可能有更好的方法来解决这个问题

  • 解析 XML
  • 检查其格式以保存下来
  • 而不是保存下来的数据被视为文本,而是被视为 XML

也许我正在做的很好,但已经有一段时间了,想知道是否还有其他方法:)

谢谢

0 投票
3 回答
420 浏览

c# - 我应该如何管理基于 Xml 的文档的不同不兼容格式

我有一个应用程序,它以基于 Xml 的格式保存文档(想想 word 文档) - 目前从 xsd 文件生成的 C# 类用于读取/写入文档格式,直到最近我不得不更改格式时一切都很好文件。我担心的是向后兼容性,因为我的应用程序的未来版本 需要能够读取所有以前版本保存的文档,理想情况下,我还希望我的应用程序的旧版本能够优雅地处理阅读我的应用程序未来版本保存的文档。

例如,假设我更改文档的架构以在某处添加(可选)额外元素,那么我的应用程序的旧版本将简单地忽略额外的元素并且不会有任何问题:

但是,如果进行了重大更改(例如,将属性更改为元素或元素集合),那么我的应用程序的过去版本应该忽略此元素(如果它是可选的),或者通知用户他们正在尝试否则,请阅读使用我的应用程序的较新版本保存的文档。这也是目前让我头疼的问题,因为我的应用程序的所有未来版本都需要完全独立的代码来阅读两个不同的文档。

此类更改的一个示例是以下 xml:

更改为:

为了防止将来出现支持问题,我想提出一个体面的策略来处理我将来可能进行的更改,以便我现在发布的应用程序版本能够应对这些更改未来:

  • 文档的“版本号”是否应该存储在文档本身中,如果是,应该使用什么版本控制策略?如果文档版本与 .exe 程序集版本匹配,或者应该使用更复杂的策略(例如,主要修订版本更改表示重大更改,而次要修订版本增量表示非重大更改 - 例如额外的可选元素)
  • 我应该使用什么方法来阅读文档本身以及如何避免为不同版本的文档复制大量代码?
    • 尽管 XPath 显然是最灵活的,但实现它比简单地使用 xsd 生成类要多得多。
    • 另一方面,如果使用 DOM 解析,则每次重大更改都需要在源代码控制中生成文档 xsd 的新副本,如果需要将修复应用于旧模式,则会导致问题(仍然支持旧版本的应用程序) .

此外,我假设我所做的所有更改都可以分为“喙状更改”和“非破坏性更改”这两类,但我并不完全相信这是一个安全的假设。制作。

请注意,我非常松散地使用术语“文档” - 内容根本不像文档!

谢谢你能给我的任何建议。

0 投票
1 回答
1587 浏览

.net - 在 .NET 中,如何将 UTF-16 XMLDocument 写入带有 BOM 的字符串

我正在使用 xml 文档在 .NET 中即时构建XmlDocument 。然后我使用XslCompiledTransform的Transform()方法对其进行转换。

Transform() 方法引发异常,因为在流中发现了无效的编码字符。当我在 Visual Studio 中的 TextVisualizer 的帮助下将字符串复制/粘贴到Altova XmlSpy中时,它没有发现编码问题。

我尝试在文档中添加一个 UTF-16 标头以使其呈现为 UTF-16,并从结果文本中调用 Transform 导致它抱怨 BOM。下面是我使用的代码的简化版本。

因此,我将其写入这样的字符串:

我必须怎么做才能添加 BOM 或让 XslCompiledTransform.Transform 不关心 bom?

0 投票
5 回答
48548 浏览

c# - 在 C# 中解码 CDATA 部分

我有一些 XML 如下:

我正在使用它访问它,curXmlNode.SelectSingleNode("description").InnerText但值返回

替p>

有没有一种简单的方法可以从 CDATA 部分获取这种输出?留下实际的 CDATA 标记似乎让它以相同的方式返回。