2011-02-18 82 views
2

假設你有以下設置的配置文件:XmlMassUpdate多個值(的MSBuild社區任務)

<someNode> 
    <node>value A</node> 
    <node>value B</node> 
    <node>value C</node>  
</someNode> 

對於我的生活,我無法弄清楚如何讓XmlMassUpdate注入如下:

<someNode> 
    <node>value 1</node> 
    <node>value 2</node> 
    <node>value 3</node>  
</someNode> 

結果看起來是這樣的:

<someNode> 
    <node>value 1</node> 
    <node>value B</node> 
    <node>value C</node> 
</someNode> 

我正在拍攝的是:

<someNode> 
    <node>value A</node> 
    <node>value B</node> 
    <node>value C</node> 
    <node>value 1</node> 
    <node>value 2</node> 
    <node>value 3</node>  
</someNode> 

編輯:我發現了一個臨時解決方案(見下文)...仍然對更好的東西感興趣。

<someNode> 
    <node xmu:key="id" id="1">value A</node> 
    <node xmu:key="id" id="2">value B</node> 
    <node xmu:key="id" id="3">value C</node> 
</someNode> 

回答

3

答案是對元素應用一個唯一的屬性,並將其用作xmu:key(請參閱上面的EDIT)。

2

獲取社區任務代碼。 替換:

if (keyAttribute == null) 
{ 
       xpath = nodeToFind.Name; 
} 

隨着:

if (keyAttribute == null) 
      { 
       xpath = nodeToFind.Name; 
       if (nodeToFind.ChildNodes.Count == 1 && nodeToFind.FirstChild.NodeType == XmlNodeType.Text) 
       { 
        xpath = string.Format("{0}[{1}='{2}']/{1}", parentNode.LocalName, nodeToFind.LocalName, 
              nodeToFind.InnerText, nodeToFind.LocalName); 
        parentNode = parentNode.ParentNode; 
       } 
      } 

在方法: private XmlNode locateTargetNode(XmlNode parentNode, XmlNode nodeToFind, XmlAttribute keyAttribute)

重建。 你已經完成:)

+0

哇,謝謝你。好東西! –

相關問題