1

以下のgraphml(xml)ファイルを作りたいです。

<?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>

ファイルに "xmlns:y="http://graphml.graphdrawing.org/xmlns" の部分があるため、Graphml プログラムは出力ファイルをサポートできません<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 테스트&lt;/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);
4

3 に答える 3

1

なぜgraphmlNamespaceを必要な値とは異なる値に初期化したのですか?要素を名前空間http://www.yworks.com/xml/graphmlに配置する場合は、http: //graphml.graphdrawing.org/xmlnsではなく、その名前空間に要素を配置します。

于 2012-11-14T08:32:51.090 に答える
1

次の 2 行を削除するだけです。

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

XML には定義済みの既定の名前空間が既に含まれており、この名前空間http://graphml.graphdrawing.org/xmlnsShapeNode定義されています。

于 2012-11-14T03:10:45.217 に答える
0

y他の ( graphmlNamespace) 名前空間のプレフィックスになるように明示的に再定義しています。あなたShapNodey:プレフィックスを持つ他のノードは"http://www.yworks.com/xml/graphml"名前空間にある必要があります。XNamespaceコード内のその名前空間/プレフィックスには別のものが必要です。

于 2012-11-14T03:07:24.270 に答える