从另一个xml文件更改xml文件字符串值';php中的内容
我的问题可能很简单。但我对XML从来都不感兴趣。所以这对我来说是不可理解的。有一个安装程序,它的语言文件是xml格式的。土耳其语文件比其他语言的文件要窄。所以我想将“turnic.xml”导入“general.xml”。在“general.xml”文件中,如果存在相同的节点,则节点值将发生更改。如果没有,保持不变。例如,这是my turkish.xml的内容从另一个xml文件更改xml文件字符串值';php中的内容,php,xml,Php,Xml,我的问题可能很简单。但我对XML从来都不感兴趣。所以这对我来说是不可理解的。有一个安装程序,它的语言文件是xml格式的。土耳其语文件比其他语言的文件要窄。所以我想将“turnic.xml”导入“general.xml”。在“general.xml”文件中,如果存在相同的节点,则节点值将发生更改。如果没有,保持不变。例如,这是my turkish.xml的内容 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DICTIONARY type="singlelanguage" lang="tr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dictionary.xsd">
<STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör"/>
<STRING id="AI.Directory.Default32BitName" value="Otuziki bit"/>
</DICTIONARY>
在“general.xml”文件下面:
如果我管理它,它将是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DICTIONARY type="singlelanguage" lang="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dictionary.xsd">
<STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör"/>
<STRING id="AI.Directory.Default32BitName" value="Otuziki bit"/>
<STRING id="AI.DuplicateFile.DestName" value="Duplicate%s of %s"/>
<STRING id="AI.Feature.DefaultTitle" value="Feature"/>
</DICTIONARY>
我不知道该怎么办。
问候。您可以尝试将这两个文件加载到DOMDocument中,然后循环浏览常规文件。在循环内部,您可以查看是否存在土耳其值,然后将其替换。看 我就试试看。我还没有测试过这段代码,但希望您能设法修复它。应该是这样的 编辑我没有在循环中使用$result值,请立即尝试
<?php
$turkish = new DOMDocument();
$turkish->load('turkish.xml');
$general = new DOMDocument();
$general->load('general.xml');
$strings = $general->getElementsByTagName('STRING');
$turkstrings = $turkish->getElementsByTagName('STRING');
foreach($strings as $string) {
foreach($turkstrings as $turk) {
if($turk->getAttribute("id") == $string->getAttribute("id")) {
$string->setAttribute("value", $turk->getAttribute("value"));
}
}
}
echo $general->saveXML();
?>
您可以尝试将这两个文件加载到DOMDocument中,然后循环浏览常规文件。在循环内部,您可以查看是否存在土耳其值,然后将其替换。看 我就试试看。我还没有测试过这段代码,但希望您能设法修复它。应该是这样的 编辑我没有在循环中使用$result值,请立即尝试
<?php
$turkish = new DOMDocument();
$turkish->load('turkish.xml');
$general = new DOMDocument();
$general->load('general.xml');
$strings = $general->getElementsByTagName('STRING');
$turkstrings = $turkish->getElementsByTagName('STRING');
foreach($strings as $string) {
foreach($turkstrings as $turk) {
if($turk->getAttribute("id") == $string->getAttribute("id")) {
$string->setAttribute("value", $turk->getAttribute("value"));
}
}
}
echo $general->saveXML();
?>
我不确定您所要求的内容是否真的有用,因为软件应该已经用默认值即时完成了不完整的翻译文件 但从技术上来说,这是可能的,例如,通过检查土耳其XML并更改通用XML中的每个对应条目:
$new = simplexml_load_string($general);
$elements = simplexml_load_string($turkish)->STRING;
foreach ($elements as $element)
{
$xpath = sprintf('//STRING[@id="%s"]', $element['id']);
if (list($found) = $new->xpath($xpath))
{
$found['value'] = $element['value'];
$found['imported'] = 'turkish';
}
}
$new->asXML('php://output');
本例使用。输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DICTIONARY xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="singlelanguage" lang="neutral" xsi:noNamespaceSchemaLocation="dictionary.xsd">
<STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör" imported="turkish"/>
<STRING id="AI.Directory.Default32BitName" value="Otuziki bit" imported="turkish"/>
<STRING id="AI.DuplicateFile.DestName" value="Duplicate%s of %s"/>
<STRING id="AI.Feature.DefaultTitle" value="Feature"/>
</DICTIONARY>
我不确定您所要求的内容是否真的有用,因为软件应该已经用默认值即时完成了不完整的翻译文件 但从技术上来说,这是可能的,例如,通过检查土耳其XML并更改通用XML中的每个对应条目:
$new = simplexml_load_string($general);
$elements = simplexml_load_string($turkish)->STRING;
foreach ($elements as $element)
{
$xpath = sprintf('//STRING[@id="%s"]', $element['id']);
if (list($found) = $new->xpath($xpath))
{
$found['value'] = $element['value'];
$found['imported'] = 'turkish';
}
}
$new->asXML('php://output');
本例使用。输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DICTIONARY xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="singlelanguage" lang="neutral" xsi:noNamespaceSchemaLocation="dictionary.xsd">
<STRING id="AI.Directory.DefaultDefaultDir" value="Yeni Klasör" imported="turkish"/>
<STRING id="AI.Directory.Default32BitName" value="Otuziki bit" imported="turkish"/>
<STRING id="AI.DuplicateFile.DestName" value="Duplicate%s of %s"/>
<STRING id="AI.Feature.DefaultTitle" value="Feature"/>
</DICTIONARY>
你用这个做了太多的循环,却一无所获。如果您选择DOMDocument,checkout,它允许您从turkish元素通过id获取general元素,您可以通过一个foreach来完成此操作,而不是通过较小的文档更改较大的文档。您使用此操作进行了太多的循环。如果您选择DOMDocument,checkout,它允许您通过id从turkish元素获取general元素,您可以通过一个foreach来完成此操作,而不是通过较小的文档更改较大的文档。是的,好的。软件应该已经完成了不完整的翻译文件,默认值是动态的。但我想把所有内容翻译成我的母语。但当我有两个不同的语言文件时,我会错过哪个是哪个。谢谢你的帮助。啊,很高兴知道。为了更好地区分哪一个是where(也是以机器可读的方式),如果元素被导入,我将答案设置imported属性更新为sourcefiles语言名称。因此,您可以更轻松地检查需要从合并文件中转换多少字符串;)非常感谢你。这对我来说更好。是的,好的。软件应该已经完成了不完整的翻译文件,默认值是动态的。但我想把所有内容翻译成我的母语。但当我有两个不同的语言文件时,我会错过哪个是哪个。谢谢你的帮助。啊,很高兴知道。为了更好地区分哪一个是where(也是以机器可读的方式),如果元素被导入,我将答案设置imported属性更新为sourcefiles语言名称。因此,您可以更轻松地检查需要从合并文件中转换多少字符串;)非常感谢你。这对我来说更好。