XML:让子节点继承父节点名称空间?

时间:2015-05-29 15:28:49

标签: c# xml xpath xml-namespaces

我正在尝试使用XPath for C#创建一些xml节点运行时。请参阅下面的XML:

<Package xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns="http://schemas.microsoft.com/appx/2010/manifest">
  <Application>
    <m2:VisualElements>
       <!--- INSERT CHILD NODES HERE WHICH ALSO HAVE NAMESPACE 'm2' ---->
    </m2:VisualElements>
  </Application>
</Package>

目前我正在做以下事情:

XElement visualElements = doc.Descendants().SingleOrDefault(p => p.Name.LocalName == "VisualElements");
visualElements.Add(new XElement(doc.Root.GetDefaultNamespace() + "InitialRotationPreference"));

我知道这是错误的,因为我引用了默认命名空间,这将导致添加:

<InitialRotationPreference />

我想要的时候:

<m2:InitialRotationPreference />

在没有“知道”前缀或namespace-url的情况下,有没有办法访问父节点名称空间(m2)?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的文档根目录的名称空间为http://schemas.microsoft.com/appx/2010/manifest。使用VisualElements中的一个:

XName name = visualElements.Name.Namespace + "InitialRotationPreference"

或明确指定:

XName name = XName.Get("InitialRotationPreference", 
    "http://schemas.microsoft.com/appx/2013/manifest");

然后添加一个具有该名称的元素:

visualElements.Add(new XElement(name));