private string GetXpathByNode(TreeNode treeNode) { StringBuilder sbXpath = new StringBuilder(); NodeExtentionData nde = new NodeExtentionData(); TreeNode n = treeNode; if (n.Tag is NodeExtentionData == false) { return(string.Empty); } do { nde = (NodeExtentionData)n.Tag; if (string.IsNullOrEmpty(nde.XPathPart)) { return(string.Empty); } sbXpath.Insert(0, "/" + nde.XPathPart); n = n.Parent; } while (n != null); return(sbXpath.ToString()); }
private void itmCopyValueToolStripMenuItem_Click(object sender, EventArgs e) { NodeExtentionData ned = (NodeExtentionData)twSourceXml.SelectedNode.Tag; Clipboard.SetDataObject(ned.NodeValue); }
TreeNode XmlNodeToTreeNode(XPathNavigator xn, int xPathIndex) { //XPathNodeIterator nList = xn.Select("/"); //xn.SelectChildren(XPathNodeType.All); string xnValue = ""; TreeNode tn = new TreeNode(); NodeExtentionData ned = new NodeExtentionData(); switch (xn.NodeType) { case XPathNodeType.All: break; case XPathNodeType.Attribute: ned = new NodeExtentionData(xn.Name, xn.Value, xn.NodeType); tn.Tag = ned; break; case XPathNodeType.Comment: /*tn.Text = xn.OuterXml; * tn.ForeColor = Color.Gray;*/ ned = new NodeExtentionData("", xn.OuterXml, xn.NodeType); tn.Tag = ned; /*tn.Text = ned.ToString(); * tn.ForeColor = ned.Color;*/ break; case XPathNodeType.Element: //XPathNodeIterator nList = xn.SelectChildren(XPathNodeType.Text); /*if (nList.MoveNext()) * xnValue = nList.Current.Value;*/ XPathNodeIterator nList = null; XPathNavigator nav = null; /*nav = xn.Clone().CreateNavigator(); * if (nav.MoveToFirstNamespace()) * do * { * tn.Nodes.Add(XmlNodeToTreeNode(nav, -1)); * } while (nav.MoveToNextNamespace());*/ nav = xn.Clone().CreateNavigator(); if (nav.MoveToFirstAttribute()) { do { //TreeNode tna = new TreeNode(); tn.Nodes.Add(XmlNodeToTreeNode(nav, -1)); /*tna.Text = nav.OuterXml; * tna.Tag = "@" + nav.Name; * tna.ForeColor = Color.MidnightBlue;*/ //Moved to Case Attribute: /*tn.Nodes.Add(tna); * ned = new NodeExtentionData(nav.Name, nav.Value, nav.NodeType); * tna.Tag = ned; * tna.Text = ned.ToString(); * tna.ForeColor = ned.Color;*/ } while (nav.MoveToNextAttribute()); } nList = xn.SelectChildren(XPathNodeType.All); while (nList.MoveNext()) { if (nList.Current.NodeType == XPathNodeType.Text) { xnValue = nList.Current.Value; } else if (nList.Current.NodeType == XPathNodeType.Comment) { tn.Nodes.Add(XmlNodeToTreeNode(nList.Current, -1)); } else { int xpi = GetXpathIndex(nList.Current); tn.Nodes.Add(XmlNodeToTreeNode(nList.Current, xpi)); } } ned = new NodeExtentionData(xn.Name, xnValue, xPathIndex, xn.NodeType); /*tn.ForeColor = Color.Brown; * tn.Text = xn.Name + " >> " + xnValue; * tn.Tag = xn.Name + (xPathIndex > 0 ? "[" + xPathIndex.ToString() + "]" : "");*/ /*tn.ForeColor = ned.Color; * tn.Text = ned.ToString();*/ tn.Tag = ned; break; case XPathNodeType.Namespace: ned = new NodeExtentionData(xn.Name, xn.Value, xn.NodeType); tn.Tag = ned; break; case XPathNodeType.ProcessingInstruction: /*tn.Text = xn.OuterXml; * tn.ForeColor = Color.Gray;*/ ned = new NodeExtentionData("", xn.OuterXml, xn.NodeType); /*tn.Text = ned.ToString(); * tn.ForeColor = ned.Color;*/ tn.Tag = ned; break; case XPathNodeType.Root: break; case XPathNodeType.SignificantWhitespace: break; case XPathNodeType.Text: break; case XPathNodeType.Whitespace: break; default: break; } tn.Text = ned.ToString(); tn.ForeColor = ned.Color; return(tn); }