如何在XDocument

时间:2015-06-01 17:58:32

标签: c# xml linq-to-xml

我在C#中创建xml,并希望添加Namespace和Declaration。我的xml如下:

XNamespace ns = "http://ab.com//abc";

XDocument myXML = new XDocument(
    new XDeclaration("1.0","utf-8","yes"),
    new XElement(ns + "Root",
        new XElement("abc","1")))

这将在根级别和子元素abc级别添加xmlns=""

<Root xmlns="http://ab.com/ab">
    <abc xmlns=""></abc>
</Root>

但我想只在Root级别而不是像下面的子级别那样:

<Root xmlns="http://ab.com/ab">
    <abc></abc>
</Root>

以及如何在顶部添加声明,我的代码在运行后未显示声明。

请帮我把完整的xml作为

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Root xmlns="http://ab.com/ab">
    <abc></abc>
</Root>

2 个答案:

答案 0 :(得分:0)

您需要在子元素中使用相同的命名空间:

XDocument myXML = new XDocument(
    new XDeclaration("1.0","utf-8","yes"),
        new XElement(ns + "Root",
            new XElement(ns + "abc", "1")))

如果您只使用"abc",则会转换为没有命名空间的XName。然后,这会导致添加xmlns=""属性,因此abc的完全限定元素名称将被解析。

通过将名称设置为ns + "abc",转换为字符串时将添加xmlns属性,因为http://ab.com/ab的默认命名空间是从Root继承的。

如果你想简单地“继承”命名空间,那么你将无法以这种流畅的方式做到这一点。您已使用父元素的命名空间创建XName,例如:

 var root = new XElement(ns + "Root");
 root.Add(new XElement(root.Name.Namespace + "abc", "1"));

关于声明,XDocument在调用ToString时不包含此内容。如果您使用Save来撰写StreamTextWriter,或者如果您提供的XmlWriter OmitXmlDeclaration = true XmlWriterSettings StringWriter 1}}。

如果您想获取字符串,this question会使用require(pacman) pacman::p_load(psych) #using the Harman 24 mental tests,a built-in dataset res <- fa(Harman74.cor$cov,4,rotate="promax", SMC=FALSE, fm="minres") struc <- as.matrix(res$Structure) struc2 <- ifelse(struc < 0.3, NA, struc) #write to CSV write.csv(struc2,"fa_all_rounded_promax.csv",row.names=T) 获得一个漂亮的扩展方法的答案。

答案 1 :(得分:0)

在您创建的所有元素上使用命名空间:

String input = "0:13:13 - ID:( id ) / Name:( name ) / IP ( 177.22.3.4) Memory Function Code Error ( 1 )( 267 354 24 )( 12 15 5 )";

Matcher m = Pattern.compile("([\\d\\:]+).*ID:.*\\((.+)\\).*Name:\\((.+?)\\).*?IP \\((.+?)\\)(.+)").matcher(input);
while(m.find()){
    String date = m.group(1).trim();
    String id = m.group(2).trim();
    String name = m.group(3).trim();
    String ip = m.group(4).trim();
    String desc = m.group(5).trim();

    System.out.println("Date: " + date);
    System.out.println("ID: " + id);
    System.out.println("Name: " + name);
    System.out.println("IP: " + ip);
    System.out.println("Desc: " + desc);
}