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

XML: let child-node inherit parent-node namespace?

我正在尝试使用 C# 的 XPath 创建一些 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 />

有没有一些方法可以在没有 "knowing" 前缀或命名空间的情况下访问父节点命名空间 (m2)-url?

谢谢!

您的文档根目录的命名空间是 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));