使用 C# 读取/编辑 XLIFF

Jim*_*ins 4 linq-to-xml c#-4.0

我需要使用 C# 解析XLIFF文件,但遇到了一些麻烦。这些文件相当复杂,包含大量节点。

基本上,我需要做的就是从每个跨单元节点读取节点,对其进行一些处理,然后将处理后的文本插入相应的目标节点(该目标节点始终存在,但为空)。

我需要解析的节点之一的示例是(整个文件可能包含 100 个节点):

<trans-unit id="0000000002" datatype="text" restype="string">
<source>Windows Update is not installed</source>
<target/>
<iws:segment-metadata tm_score="0.00" ws_word_count="6" max_segment_length="0">
<iws:status target_content="placeholders_only"/>
</iws:segment-metadata>
<iws:boundary-seg sequence="bs20721"/>
<iws:markup-seg sequence="0000000001">
</trans-unit>
Run Code Online (Sandbox Code Playgroud)

跨单元节点可以深埋在文件中,头部分包含大量数据。我想使用 LINQ to XML 来读取数据,但我没有运气让它工作。这是我当前的代码(只是尝试从文件中读取和输出源节点:

        XDocument doc = XDocument.Load(path);

        Console.WriteLine("Before loop");

        foreach (var transUnitNode in doc.Descendants("trans-unit"))
        {
            Console.WriteLine("In loop");
            XElement sourceNode = transUnitNode.Element("source");
            XElement targetNode = transUnitNode.Element("target");
            Console.WriteLine("Source: " + sourceNode.Value);
        }
Run Code Online (Sandbox Code Playgroud)

我从来没有看到“循环”,我不知道为什么,有人可以告诉我我在这里做错了什么,或者建议一个更好的方法来实现我在这里想做的事情吗?

谢谢。

Mar*_*nen 5

尝试

XNamespace df = doc.Root.Name.Namespace;
foreach (XElement transUnitNode in doc.Descendants(df + "trans-unit"))
{
  XElement sourceNode = transUnitNode.Element(df + "source");
  // and so one, use the df namespace object to qualify any elements names
}
Run Code Online (Sandbox Code Playgroud)

另请参阅http://msdn.microsoft.com/en-us/library/bb387093.aspx