2012-11-14 36 views
1

我想製作下面的graphml(xml)文件。如何在這種情況下刪除「xmlns:y」?

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<graphml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd" xmlns="http://graphml.graphdrawing.org/xmlns"> 
    <key for="node" id="d3" yfiles.type="nodegraphics" /> 
    <graph edgedefault="directed" id="G"> 
    <node id="3"> 
     <data key="d3"> 
     <y:ShapeNode> 
      <y:Geometry height="50" width="50" x="80" y="0" /> 
      <y:BorderStyle color="#000000" type="line" width="1.0" /> 
      <y:NodeLabel alignment="center" autoSizePolicy="content">TEST</y:NodeLabel> 
     </y:ShapeNode> 
     </data> 
    </node> 
    <node id="1000"> 
     <data key="d3"> 
     <y:ShapeNode> 
      <y:Geometry height="50" width="50" x="240" y="0" /> 
      <y:BorderStyle color="#000000" type="line" width="1.0" /> 
      <y:NodeLabel alignment="center" autoSizePolicy="content">TEST</y:NodeLabel> 
     </y:ShapeNode> 
     </data> 
    </node> 
    </graph> 
</graphml> 

但我的代碼作出了以下文件

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<graphml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd" xmlns="http://graphml.graphdrawing.org/xmlns"> 
    <key for="node" id="d3" yfiles.type="nodegraphics" /> 
    <graph edgedefault="directed" id="G"> 
    <node id="3"> 
     <data key="d3"> 
     <y:ShapeNode xmlns:y="http://graphml.graphdrawing.org/xmlns"> 
      <y:Geometry height="50" width="50" x="80" y="0" /> 
      <y:BorderStyle color="#000000" type="line" width="1.0" /> 
      <y:NodeLabel alignment="center" autoSizePolicy="content">TEST</y:NodeLabel> 
     </y:ShapeNode> 
     </data> 
    </node> 
    <node id="1000"> 
     <data key="d3"> 
     <y:ShapeNode xmlns:y="http://graphml.graphdrawing.org/xmlns"> 
      <y:Geometry height="50" width="50" x="240" y="0" /> 
      <y:BorderStyle color="#000000" type="line" width="1.0" /> 
      <y:NodeLabel alignment="center" autoSizePolicy="content">TEST</y:NodeLabel> 
     </y:ShapeNode> 
     </data> 
    </node> 
    </graph> 
</graphml> 

Graphml程序無法支持輸出文件,因爲該文件有部分 「的xmlns:Y =」 HTTP://graphml.graphdrawing .ORG/XMLNS 「在<y:ShapeNode xmlns:y="http://graphml.graphdrawing.org/xmlns">

我要刪除的部分 」的xmlns:Y =「 http://graphml.graphdrawing.org/xmlns」 在

<y:ShapeNode xmlns:y="http://graphml.graphdrawing.org/xmlns"> 

如何擦除零件?我該怎麼辦? 我的源代碼是低於

XDocument xDoc = new XDocument(); 
    XNamespace graphmlNamespace = "http://graphml.graphdrawing.org/xmlns"; 
    XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); 


    XElement mainElement = new XElement(graphmlNamespace + "graphml"); 
    XAttribute mainAttrib2 = new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName); 
    XAttribute mainAttrib3 = new XAttribute(XNamespace.Xmlns + "y", "http://www.yworks.com/xml/graphml"); 
    XAttribute mainAttrib4 = new XAttribute("schemaLocation", "http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"); 
    mainElement.Add(mainAttrib2); 
    mainElement.Add(mainAttrib3); 
    mainElement.Add(mainAttrib4); 

    XElement subElement_key = new XElement(graphmlNamespace + "key"); 
    XAttribute subAttrib_key1 = new XAttribute("for", "node"); 
    XAttribute subAttrib_key2 = new XAttribute("id", "d3"); 
    XAttribute subAttrib_key3 = new XAttribute("yfiles.type", "nodegraphics"); 

    subElement_key.Add(subAttrib_key1); 
    subElement_key.Add(subAttrib_key2); 
    subElement_key.Add(subAttrib_key3); 

    mainElement.Add(subElement_key); 

    // 
    XElement subElement_graph = new XElement(graphmlNamespace + "graph"); 
    XAttribute subAttrib_graph1 = new XAttribute("edgedefault", "directed"); 
    XAttribute subAttrib_graph2 = new XAttribute("id", "G"); 

    subElement_graph.Add(subAttrib_graph1); 
    subElement_graph.Add(subAttrib_graph2); 

    mainElement.Add(subElement_graph); 

    // 
    for(int i=0; i< 2; i++) // for test 
    { 
     XElement sub2Element_node = new XElement(graphmlNamespace + "node"); 
     XAttribute sub2Attrib_node1 = new XAttribute("id", row["SkillEnumID"].ToString()); 
     sub2Element_node.Add(sub2Attrib_node1); 

     subElement_graph.Add(sub2Element_node); 

     // <data key="d3"> 
     XElement sub3Element_data = new XElement(graphmlNamespace + "data"); 
     XAttribute sub3Attrib_data1 = new XAttribute("key", "d3"); 
     sub3Element_data.Add(sub3Attrib_data1); 
     sub2Element_node.Add(sub3Element_data); 


     //<y:ShapeNode> 
     XElement sub4Element_yShapeNode = new XElement(graphmlNamespace + "ShapeNode"); 
     XAttribute sub4Attrib_yShapeNode1 = new XAttribute(XNamespace.Xmlns + "y", graphmlNamespace); 
     sub4Element_yShapeNode.Add(sub4Attrib_yShapeNode1); 



     sub3Element_data.Add(sub4Element_yShapeNode); 

     //<y:Geometry height="30.0" width="30.0" x="-15.0" y="-15.0"/> 
     int iX = 0; 
     Int32.TryParse(row["ColumnNumber"].ToString(), out iX); 
     iX = (iX * (m_iNodeWidth + m_iXGap)); 

     int iY = 0; 
     Int32.TryParse(row["RowNumber"].ToString(), out iY); 
     iY = (iY * (m_iNodeHeight + m_iYGap)); 

     XElement sub5Element_yGeometry = new XElement(graphmlNamespace + "Geometry"); 
     XAttribute sub5Attrib_yGeometry1 = new XAttribute("height", m_iNodeHeight.ToString()); 
     XAttribute sub5Attrib_yGeometry2 = new XAttribute("width", m_iNodeWidth.ToString()); 
     XAttribute sub5Attrib_yGeometry3 = new XAttribute("x", iX.ToString()); 
     XAttribute sub5Attrib_yGeometry4 = new XAttribute("y", iY.ToString()); 
     sub5Element_yGeometry.Add(sub5Attrib_yGeometry1); 
     sub5Element_yGeometry.Add(sub5Attrib_yGeometry2); 
     sub5Element_yGeometry.Add(sub5Attrib_yGeometry3); 
     sub5Element_yGeometry.Add(sub5Attrib_yGeometry4); 

     sub4Element_yShapeNode.Add(sub5Element_yGeometry); 

     // <y:Fill color="#FFCC00" transparent="false"/> 
     XElement sub5Element_yBorderStyle = new XElement(graphmlNamespace + "BorderStyle"); 
     XAttribute sub5Attrib_yBorderStyle1 = new XAttribute("color", "#000000"); 
     XAttribute sub5Attrib_yBorderStyle2 = new XAttribute("type", "line"); 
     XAttribute sub5Attrib_yBorderStyle3 = new XAttribute("width", "1.0"); 
     sub5Element_yBorderStyle.Add(sub5Attrib_yBorderStyle1); 
     sub5Element_yBorderStyle.Add(sub5Attrib_yBorderStyle2); 
     sub5Element_yBorderStyle.Add(sub5Attrib_yBorderStyle3); 

     sub4Element_yShapeNode.Add(sub5Element_yBorderStyle); 

     //<y:NodeLabel alignment="center" autoSizePolicy="content">10 테스트</y:NodeLabel> 
     string strLabel = "TEST"; 

     XElement sub5Element_yNodeLabel = new XElement(graphmlNamespace + "NodeLabel"); 
     XAttribute sub5Attrib_yNodeLabel1 = new XAttribute("alignment", "center"); 
     XAttribute sub5Attrib_yNodeLabel2 = new XAttribute("autoSizePolicy", "content"); 
     sub5Element_yNodeLabel.Add(sub5Attrib_yNodeLabel1); 
     sub5Element_yNodeLabel.Add(sub5Attrib_yNodeLabel2); 
     sub5Element_yNodeLabel.Value = strLabel; 

     sub4Element_yShapeNode.Add(sub5Element_yNodeLabel); 
    } 

    // 

    xDoc.Add(mainElement); 

    xDoc.Declaration = new XDeclaration("1.0", "utf-8", "no"); 
    xDoc.Save(strFileFullPath); 
+1

這兩個XML樣本對我來說都是一樣的......你能否更明確地區分它? –

+0

區別是。第一個文件只有,但其他文件有。 – user1822545

+0

yEd(Graphml應用程序)無法正常加載我的文件,因爲部分xmlns:y = ~~~~ user1822545

回答

0

你被明確重新定義y是其他(graphmlNamespace)命名空間的前綴。你的ShapNode和其他帶有y:前綴的節點應該在"http://www.yworks.com/xml/graphml"命名空間中。您需要在代碼中爲該名稱空間/前綴另外使用XNamespace

1

只需刪除這兩條線:

XAttribute sub4Attrib_yShapeNode1 = new XAttribute(XNamespace.Xmlns + "y", graphmlNamespace); 
sub4Element_yShapeNode.Add(sub4Attrib_yShapeNode1); 

你的XML已經包含定義默認命名空間:http://graphml.graphdrawing.org/xmlnsShapeNode在這個命名空間中定義。

+0

我不確定它是否有幫助,因爲節點需要位於2個命名空間中,而只有一個定義在代碼...但你可能是正確的 - 太多的代碼樣本,以確保... –

+0

@AlexeiLevenkov,你是什麼意思?根據提供的XML'ShapeData'在'http:// graphml.graphdrawing.org/xmlns'中定義。因此,不需要在其中指定名稱空間,因爲XML的默認名稱空間爲「http:// graphml.graphdrawing.org/xmlns」。根據XML規範,這兩種XML都是正確的,所以這是OP的XML解析器的問題。 –

+0

第一個XML中的'y:ShapeNode'具有「http://www.yworks.com/xml/graphml」作爲名稱空間...而不是使用空名稱空間的「http://graphml.graphdrawing.org/xmlns」字首。 –