我正在从Excel文件中的一组值生成大量XML文档。每个XML文档唯一更改的是值。我认为生成这些文档的最好方法是制作一个“XML骨架”(因为XML格式永远不会改变),然后插入像“&%blahNameblahTest”这样的符号,这样我就可以在每个文件上预先形成一个Regex.Replace。值。
我将把这个项目移交给另一个开发人员,我想知道是否应该通过System.XML命名空间将项目转换为每次手动生成XML文件。
我看到的唯一优势是确保XML文档有效。
当前方法比该方法更具可读性,并且因为我生成了大约1500个文档,因此速度更快。
答案 0 :(得分:1)
我会坚持你现有的方法。
但是,我会添加对System.Linq.XML
的引用,并在输出上执行XElement.Parse()
以确保您的结果文档正确解析。 (您提到的System.Xml路由的一个优点!)
善,
丹
答案 1 :(得分:0)
您可以使用string.Format
方法
string.Format(
@"
<Parent attribute = \"{0}\">
<Child>{1}</Child>
</Parent>
",
"foo",
"bar"
);
这将导致
<Parent attribute = "foo">
<Child>bar</Child>
</Parent>
您可以发送到任何流。
答案 2 :(得分:0)
通过将skelleton XML解析为XDocument
并以LINQ to XML查询的形式执行替换,您可以充分利用这两个方面。
也许按照
的方式编写扩展方法public static void Replace(this XDocument haystack, String needle, String replacement)
{
var query = haystack.Root
.DescendantsAndSelf()
.Where(xe => !xe.HasElements && xe.Value == needle);
foreach (XElement item in query)
{
item.Value = replacement;
}
}
答案 3 :(得分:0)
我看到的唯一优势是确保XML文档有效。
当前方法比该方法更具可读性,并且因为我生成了大约1500个文档,因此速度更快。
在我看来,在设计生成1500个XML文档的流程时,保证所有输出实际上都是格式良好的XML并不是一件容易的事。
假设包含您要替换的符号之一的典型元素如下所示:
<element>$symbol</element>
你可以用这种方式处理替换:
XmlDocument skeleton = new XmlDocument();
skeleton.Load(inputPath);
foreach (XmlElement elm in skeleton.SelectNodes("//*[starts-with(., '$')]"))
{
elm.InnerText = GetValue(elm.InnerText);
}
skeleton.Save(outputPath);
您可以使用XmlReader
和XmlWriter
执行类似的操作,这会产生更快的代码,但不会那么紧凑。
这种方法的另一个优点是使用Regex.Replace
:它只通过骨架XML两次,一次解析它,一次搜索它。如果使用正则表达式,则将为您替换的每个值从头到尾搜索骨架XML。