【发布时间】:2014-03-09 00:05:49
【问题描述】:
我正在创建用于编辑 XML 文件以翻译游戏的 PHP 系统。
我正在使用 DOM,例如用于翻译人员的文件比较(使用更新 XML 文件)。
我有带有新字符串和/或新 ID 的新旧 XML(提前:我无法更改 XML 结构)。
为了将来的回显节点值以相同的 ID 顺序进行比较,我有以下代码:
<?php
$xml2 = new DOMDocument('1.0', 'utf-16');
$xml2->formatOutput = true;
$xml2->preserveWhiteSpace = false;
$xml2->load(substr($file, 0, -4).'-pl.xml');
$xml = new DOMDocument('1.0', 'utf-16');
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$xml->load($file);
for ($i = 0; $i < $xml->getElementsByTagName('string')->length; $i++) {
if ($xml2->getElementsByTagName('string')->item($i)) {
$element_pl = $xml2->getElementsByTagName('string')->item($i);
$body_pl = $element_pl->getElementsByTagName('body')->item(0);
$id_pl = $element_pl->getElementsByTagName('id')->item(0);
} else $id_pl->nodeValue = "";
$element = $xml->getElementsByTagName('string')->item($i);
$id = $element->getElementsByTagName('id')->item(0);
$body = $element->getElementsByTagName('body')->item(0);
if ($id_pl->nodeValue == $id->nodeValue) {
$element->appendChild( $xml->createElement('body-pl', $body_pl->nodeValue) );
}
}
$xml = simplexml_import_dom($xml);
?>
以上代码改动:
<?xml version="1.0" encoding="utf-16"?>
<strings>
<string>
<id>1</id>
<name>ABC</name>
<body>English text</body>
</string>
</strings>
到(通过从 *-pl.xml 文件中添加文本):
<?xml version="1.0" encoding="utf-16"?>
<strings>
<string>
<id>1</id>
<name>ABC</name>
<body>English text</body>
<body-pl>Polish text</body-pl>
</string>
</strings>
但我需要通过“名称”值在 *-pl.xml 中找到“正文”值。
"For" loop:
get "ABC" from "name" tag [*.xml] ->
find "ABC" in "name" tag [*-pl.xml] ->
get body node from that "string" [*-pl.xml]
我可以通过 strpos() 做到这一点,但我的(最小的)文件有 25346 行..
有什么可以做的吗? “有孩子(“姓名”,“ABC”)-> 父母”?
然后我可以得到这个字符串的“body”值。
提前感谢您的建议或链接到类似的,已解决的问题,
问候
【问题讨论】: