以下是TMX文件中的TU(翻译单位)示例:

<tu creationdate="20080812T111221Z" creationid="Cheeseus" changedate="20190825T065920Z" changeid="Cheeseus" usagecount="0" tuid="2">
    <tuv xml:lang="BG">
      <seg>ПАРТНЬОРИ</seg>
    </tuv>
    <tuv xml:lang="EN-GB">
      <seg>PARTNERS</seg>
    </tuv>
</tu>

我是这样读档案的:

$xmlStr = file_get_contents($uploadedFile);
$xmlObj = simplexml_load_string($xmlStr);
$TUs = $xmlObj->body->tu;

foreach($TUs as $TU) {
    if(isset($TU->tuv[0]->seg)) {
        $sourceText = $TU->tuv[0]->seg->asXML();
        $targetText = $TU->tuv[1]->seg->asXML();
    }
}

我现在也在试着读取每个tuvxml:lang个属性.我认为我能够以访问父对象tu的属性(例如$TU['creationdate'])的相同方式来完成此操作.但同样的方法并不奏效.

我试过了:

var_dump($TU->tuv[0]['xml:lang']) /* result: null */
var_dump($TU->tuv['xml:lang']); /* result: null */
var_dump($TU->tuv[0]['attributes']['xml:lang']); /* result: Warning: Trying to access array offset on value of type null... */
var_dump($TU->tuv[0]['@attributes']['xml:lang']); /* result: Warning: Trying to access array offset on value of type null... */

以及其他几个完全 destruct 了 playbook 的人.我还try 在不使用"xml:"部分的情况下访问该属性--效果相同.

我希望你能为我指明正确的方向.

推荐答案

要读取属于命名空间一部分的属性,通常需要使用attributes()方法并指定命名空间URI.由于xml:是XML中的预定义命名空间,因此其URI为http://www.w3.org/XML/1998/namespace:

$TU->tuv[0]->attributes('http://www.w3.org/XML/1998/namespace')->lang;

但您可以将('xml', true)作为参数进行传递,而不是:

$TU->tuv[0]->attributes('xml', true)->lang;

因此,工作代码应该是这样的(顺便说一句,我不确定您在读取 node 值时调用->asXml()是为了什么,所以我删除了它):

$xmlStr = file_get_contents($uploadedFile);
$xmlObj = simplexml_load_string($xmlStr);
$TUs = $xmlObj->body->tu;

foreach($TUs as $TU) {
    if (isset($TU->tuv[0]->seg)) {
        $sourceText = $TU->tuv[0]->seg;
        $targetText = $TU->tuv[1]->seg;

        $sourceLang = (string)$TU->tuv[0]->attributes('xml', true)->lang;
        $targetLang = (string)$TU->tuv[1]->attributes('xml', true)->lang;

        echo "Source Text: {$sourceText}, Source Language: {$sourceLang}\n";
        echo "Target Text: {$targetText}, Target Language: {$targetLang}\n";
    }
}

将产生:

Source Text: ПАРТНЬОРИ, Source Language: BG
Target Text: PARTNERS, Target Language: EN-GB

Php相关问答推荐

p a/a/p的x路径 Select ,但不是p somethext a链接/a或某些文本/p>

Laravel—通过单击处理多条路由

PHP:从数组中获取唯一的数字组合

PHP日期操作,将多个日期输出为格式化字符串

基于不用于变体的产品属性隐藏多个WooCommerce发货方式

PHP -多维数组到一维数组

将客户重定向到自定义感谢页后的空白页

在PHP中,如何将介于0和1之间(包括0和1)的浮点概率转换为数组索引?

使用PHP编码的字符串与使用OpenSSL编写的shell 代码之间的差异

在laravel 9或10 php中向中间件响应添加自定义数据

Laravel 10中的Validator类

WordPress:今天的计数';修改和发布的帖子

添加不存在的订单元数据以扩展WooCommerce针对特定产品的管理订单搜索

如何在PHP中根据会话将用户重定向到不同的页面?

服务器升级到新的mysql版本8.0.34后查询错误

批量更新 WooCommerce 中所有产品的特定自定义字段

使用产品自定义字段作为 WooCommerce 中特定用户角色的折扣百分比

将图像作为 PHP post 响应发送到浏览器

PHP Symfony 在测试.env文件中将接口自动装配作为构造函数参数,但使用接口的特定类

PHP 将数组值插入到 csv 列