gpt4 book ai didi

c# - 向遵守 XSD 的 XmlDocument 添加新元素

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:15 25 4
gpt4 key购买 nike

目前,我正在使用 XPath 表示法向我的 XmlDocument 添加元素,为此我编写了代码,将元素放置在文件中的正确位置。除了一个异常(exception)。我不知道如何让它注意我的 XSD 文件中定义的序列规则。

有没有一种方法可以将元素添加到 XmlDocument 中,使其遵守管理我的 XML 文件的 XSD 中定义的序列?

例如,我的 xml 文档应该如下所示:

<rootTag>
<area name="I define an area">
<description>some text here</description>
<point x="1" y="1" />
<point x="2" y="2" />
<point x="3" y="3" />
</area>
</rootTag>

然而,根据用户为上面的子标签输入值的顺序,我得到:

<rootTag>
<area name="I define an area">
<point x="1" y="1" />
<point x="2" y="2" />
<point x="3" y="3" />
<description>some text here</description>
</area>
</rootTag>

为了更正上述问题,我从 XSD 文件创建了一个数据集(名为 tempXmlDataset)。我将 XmlDocument 的内容传递到 tempXmlDataset 中,然后事情得到适当的重新排序。

但是,我的问题是由 XML 文档的第一个子项的选项引起的。该选项在 XSD 中定义为允许“区域”、“线”或“点”对象。 “area”和“line”都有“point”元素作为子元素。但是子“点”与“点”对象不同。因此,您可能已经意识到,tempXmlDataset.ReadXmlSchema(...) 创建了一个“点”表,其中只有 x 和 y。这是“区域”和“线”的 child 的定义。

因此,当我的代码运行 tempXmlDataset.ReadXml(...) 时,“点”对象的属性不会被读入,因为它将“点”对象视为子“点”。这是“点”对象的示例:

<rootTag>
<point name="I define a point" x="3" y="3" otherAttributes="">
<description>some text here</description>
</point>
</rootTag>

最佳答案

由于您标记了此 C#,我假设您使用的是 .NET 平台。 System.Xml.Schema会是你最好的 friend 。对于使用上述 API 生成 XML 的程序,它还附带了您可以用来了解如何解决问题的源代码,我会使用 XmlSampleGenerator .

生成示例 XML 需要的正是您在限制用户在给定时间点输入的 XPath 方面所需要的。我相信您必须从一开始就根据您在编辑过程中所处的位置来限制您允许的 XPath,否则,一个错误可能会使整个方法无用。

如果您不从一开始就进行约束,则可能无法尝试基于 XSD 重新排序(请阅读 SO 中的 this)...

关于c# - 向遵守 XSD 的 XmlDocument 添加新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com