gpt4 book ai didi

c# - 防止自动命名空间前缀

转载 作者:行者123 更新时间:2023-12-04 16:57:33 24 4
gpt4 key购买 nike

我有一个具有以下结构的 xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<package version="2.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="uid">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
</metadata>
<manifest></manifest>
<spine toc="ncx"></spine>
<guide></guide>
</package>

我以编程方式向结构中添加元素,如下所示:
    XDocument opfDoc = XDocument.Load(opfFile);

//create the xmlnamespaces required for the <metadata> section of the opf file.
var dc = (XNamespace)"http://purl.org/dc/elements/1.1/";
var opf = (XNamespace)"http://www.idpf.org/2007/opf";

//**add book metadata
var meta = opfDoc.Root.Element(opf + "metadata");
meta.Add(new XElement(dc + "title", bookMetaData[0].bookTitle));

从技术上讲,这是可行的,但是生成的 xml 文件正在更改 元数据部分到 opf:元数据 , 像这样:
<?xml version="1.0" encoding="utf-8"?>
<package version="2.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="uid">
<opf:metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Microsoft Project 2013 &amp; 2016 Fundamentals</dc:title>

opf:元数据从来没有在原始文件中,我也从来没有特别添加这个。如果我将原始元变量更改为如下所示,我将获得一个空引用并且无法添加新元素:
var meta = opfDoc.Root.Element("metadata");

我如何简单地向元数据部分添加代码而不向元数据元素添加命名空间前缀?

谢谢。

最佳答案

发生这种情况是因为您对 http://www.idpf.org/2007/opf 有重复的命名空间声明- 一次作为默认命名空间,一次使用 opf字首。您可以在 this fiddle 中看到简单地加载 XML 并再次将其写回将导致添加前缀 - 您无需执行任何操作。

您可以删除未使用的 xmlns:opf来自 metadata 的声明元素,然后 LINQ to XML 将正确地往返 XML。我认为没有任何其他方法可以改变它正在做的事情 - 它通过检查树来查找前缀,以及 opf前缀是它会遇到的第一个。

然而,值得注意的是,这两种表示在语义上是相同的。区别并不重要。

关于c# - 防止自动命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711602/

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