Как получить указанный c дочерний узел и значение с XDocument? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть документ XLIFF, который выглядит следующим образом:

<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" srcLang="en-US" version="2.0" xml:space="preserve">
<file canResegment="no" id="Test_x0020_File">
<unit canResegment="no" id="6TkImOYdyao" type="DocumentState">
  <originalData>
      <data id="generic_1">
        <Style FlowDirection="LeftToRight" LeadingMargin="0" TrailingMargin="0" FirstLineMargin="0" /></Style>
      </data>
      <data id="span_2">
        <Style FontFamily="Arial" FontSize="21" FontIsBold="True" /></Style>
      </data>
  </originalData>
<segment canResegment="no">
  <source>
    <pc id="block_0">
      <ph dataRef="generic_1" id="generic_1"/>
      <pc dataRefStart="span_2" id="span_2">Correct!</pc>
    </pc>
  </source>
</segment>
</unit>

Я пытаюсь сделать следующее:

  1. Клонировать узел-источник и затем переименовать его в Target.
  2. Получите значение, в данном случае «Правильно!» от <pc dataRefStart="span_2" id="span_2">
  3. Установите значение Правильно! Корректо! (переведенное слово)

Я думаю, что я # 1 сделал со следующим кодом:

XDocument doc = XDocument.Load("F:\\Projects\\Translate\\Test Data.xlf")

XNamespace df = doc.Root.Name.Namespace;

foreach (XElement segmentNode in doc.Descendants(df + "segment"))
  {
    //Find the Souce node and value
    XElement sourceNodeValue = segmentNode.Element(df + "source");
    var desiredElement = sourceNodeValue.FirstNode as XElement;

    if (desiredElement != null)
     {
       segmentNode.Add(new XElement(df + "target", new XElement(desiredElement)));
     }

Кажется, это работает, и я считаю, что у меня также # 2 работает с этим код, как я могу получить «Правильно!»:

string sourceTranslated = "";
sourceTranslated = sourceNodeValue.Value;

Я потерпел неудачу с # 3. Я пробовал несколько вещей, но лучшее, что я могу сделать, это получить значение, но затем я теряю все данные дочернего узла. Это показывает <pc id="block_0">Correcto!</pc> Это должно выглядеть так:

<pc id="block_0">
  <ph dataRef="generic_1" id="generic_1"/>
  <pc dataRefStart="span_2" id="span_2">Correcto!</pc>
</pc>

Все идеи приветствуются и заранее благодарны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...