如何使用XDocument获取特定的子节点和值?

问题描述 投票:0回答:1

我有一个看起来像这样的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. 克隆源节点,然后将其重命名为目标。
  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>

感谢所有想法,并预先感谢您。

xml xliff
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.