XmldocumentFragment SET INRINXML失败,未声明为前缀



我有一个XML文档,基本上看起来像这样:

<ArrayOfAspect xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Aspect i:type="TransactionAspect">
        ...
    </Aspect>
    <Aspect i:type="TransactionAspect">
        ...
    </Aspect>
</ArrayOfAspect>

我想将新的Aspect附加到此列表中。
为了这样做,我从文件加载此XML,创建一个XmlDocumentFragment并从文件加载新方面(这基本上是我用数据填充的模板(。然后,我用新方面填充文档片段,并从小就附加它。
但是,当我尝试设置此片段的XML时,它会失败,因为没有定义前缀i

// Load all aspects
var aspectsXml = new XmlDocument();
aspectsXml.Load("aspects.xml");
// Create and fill the fragment
var fragment = aspectsXml.CreateDocumentFragment();
fragment.InnerXml = _templateIFilledWithData; // This fails because i is not defined
// Add the new child
aspectsXml.AppendChild(fragment)

这就是模板的样子:

<Aspect i:type="TransactionAspect">
    <Value>$VALUES_PLACEHOLDER$</Value>
    ...
</Aspect>

请注意,我不想为此创建Pocos并将其序列化,因为这些方面实际上很大且嵌套了,并且我在其他一些XML文件中也遇到了同样的问题。


编辑:
JDWENG建议使用XMLLINQ(这比我以前使用的要好,所以谢谢(。这是我尝试与XMLLINQ一起使用的代码(由于未申报的前缀而仍失败(:

var aspects = XDocument.Load("aspects.xml");
var newAspects = EXlement.Parse(_templateIFilledWithData); // Fails here - Undeclared prefix 'i'
aspects.Root.add(newAspect);

使用xml linq:

using System.Collections.ObjectModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication57
{
    class Program
    {
        const string URL = "http://goalserve.com/samples/soccer_inplay.xml";
        static void Main(string[] args)
        {
            string xml =
                "<ArrayOfAspect xmlns:i="http://www.w3.org/2001/XMLSchema-instance">" +
                    "<Aspect i:type="TransactionAspect">" +
                   "</Aspect>" +
                    "<Aspect i:type="TransactionAspect">" +
                    "</Aspect>" +
                "</ArrayOfAspect>";
            XDocument doc = XDocument.Parse(xml);
            XElement root = doc.Root;
            XNamespace nsI = root.GetNamespaceOfPrefix("i");
            root.Add(new XElement("Aspect", new object[] {
                new XAttribute(nsI + "type", "TransactionAspect"),
                new XElement("Value", "$VALUES_PLACEHOLDER$")
            }));

        }
    }
}

相关内容

  • 没有找到相关文章

最新更新