Vários valores XmlMassUpdate (tarefas da comunidade MSBuild)
-
15-11-2019 - |
Pergunta
Digamos que você tenha um arquivo de configuração com as seguintes configurações:
<someNode>
<node>value A</node>
<node>value B</node>
<node>value C</node>
</someNode>
Durante toda a minha vida, não consigo descobrir como fazer com que o XmlMassUpdate injete o seguinte:
<someNode>
<node>value 1</node>
<node>value 2</node>
<node>value 3</node>
</someNode>
O resultado é assim:
<someNode>
<node>value 1</node>
<node>value B</node>
<node>value C</node>
</someNode>
O que estou buscando é:
<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>
EDITAR:Encontrei uma solução temporária (veja abaixo) ...ainda estou interessado em algo melhor.
<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>
Solução
A resposta é aplicar um atributo exclusivo ao elemento e usá-lo como xmu:key (veja EDIT acima).
Outras dicas
Obtenha o código das tarefas da comunidade.Substituir:
if (keyAttribute == null)
{
xpath = nodeToFind.Name;
}
Com:
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;
}
}
No método:private XmlNode locateTargetNode(XmlNode parentNode, XmlNode nodeToFind, XmlAttribute keyAttribute)
Reconstruir.Você Terminou :)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow