[英]Add nodes in XML based on Xpath and also add multiple similar tags in same parent
我擁有構建XML所需的所有必需的xpath。 因此,我需要使用xpaths和關聯值來構建此XML。 但是在某些情況下,XML可能需要在同一父級中具有相同的標簽,如下所示:
<root>
<Name>
<Address>
<Fname>bbb</Fname>
<Lname>bbb</Lname>
<Official>o</Official>
<Official>r</Official>
<District>Ekm Edited</District>
<State>Kerala Edited</State>
</Address>
<Sex>
<Field1>m</Field1>
<Field1>f</Field1>
</Sex>
<Qualification>
<EDUCATION>10</EDUCATION>
</Qualification>
</Name>
</root>
您可以看到標簽<Official>o</Official>
和<Official>r</Official>
重復的標簽具有不同的innerText [與<Sex><Field1>m</Field1><Field1>f</Field1></Sex>
]。 但是,當我嘗試創建這樣的XML時,輸出如下:
<Sex>
<Field1>m, f</Field1>
</Sex>
AND <Official>o, r</Official>
以下是我用於基於xpath創建節點的代碼:
public XmlNode makeXPath(XmlDocument doc, string xpath, string innertext)
{
string[] partsOfXPath = xpath.Split('/');
XmlNode node = null;
for (int xpathPos = partsOfXPath.Length; xpathPos > 0; xpathPos--)
{
string subXpath = string.Join("/", partsOfXPath, 0, xpathPos);
node = doc.SelectSingleNode(subXpath);
if (node != null)
{
// append new descendants
for (int newXpathPos = xpathPos; newXpathPos < partsOfXPath.Length; newXpathPos++)
{
node = node.AppendChild(doc.CreateElement(partsOfXPath[newXpathPos]));
}
break;
}
}
node.InnerText = innertext.TrimStart(' ');
return node;
}
因此,如何創建單獨的標簽,而不是用逗號分隔的innerText創建單個標簽。
編輯我
我發現了問題,我正在將xpaths和相應的值作為查詢字符串發送到此頁面。 現在,對於我來說,如果存在多個相同的標記,則Request.QueryString會產生逗號分隔的值[例如:m,f]。
好吧,我嘗試向節點添加一個屬性,但是只將最后一個數據添加到逗號分隔的數據中。
任何修復??? 就像我應該如何調用該函數來添加具有某些屬性的節點,這些屬性使相同的xpath節點成為不同的節點。 提前致謝。
據我了解您的代碼,當您要創建第二個Official
節點時,makeXPath函數將在第一個for
循環中找到一個現有的Official
節點。 node = doc.SelectSingleNode(subXpath)
將返回此現有節點,然后在不創建新節點的情況下設置innerText
。 我相信您應該在第一個for
循環之前檢查完整路徑的存在,然后創建同級。
就像是
public XmlNode makeXPath(XmlDocument doc, string xpath, string innertext)
{
string[] partsOfXPath = xpath.Split('/');
XmlNode node = null;
if (doc.SelectSingleNode(xpath) != null) {
//get the parent
node = doc.SelectSingleNode(string.Join("/", partsOfXPath, 0, partsOfXPath.Length-1));
node = node.AppendChild(doc.CreateElement(xpath));
node.InnerText = innertext.TrimStart(' ');
}
else {
for (int xpathPos = partsOfXPath.Length; xpathPos > 0; xpathPos--)
{
string subXpath = string.Join("/", partsOfXPath, 0, xpathPos);
node = doc.SelectSingleNode(subXpath);
if (node != null)
{
// append new descendants
for (int newXpathPos = xpathPos; newXpathPos < partsOfXPath.Length; newXpathPos++)
{
node = node.AppendChild(doc.CreateElement(partsOfXPath[newXpathPos]));
}
break;
}
}
node.InnerText = innertext.TrimStart(' ');
}
return node;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.