3

pptxファイルを解析しているところ、問題が発生しました。これはソースXMLのサンプルです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <p:sldMasterIdLst>
    <p:sldMasterId id="2147483648" r:id="rId2"/>
  </p:sldMasterIdLst>
  <p:sldIdLst>
    <p:sldId id="256" r:id="rId3"/>
  </p:sldIdLst>
  <p:sldSz cx="10080625" cy="7559675"/>
  <p:notesSz cx="7772400" cy="10058400"/>
</p:presentation>

タグのr:id属性値を取得する必要があります。sldMasterId

doc = Nokogiri::XML(path_to_pptx)
doc.xpath('p:presentation/p:sldMasterIdLst/p:sldMasterId').attr('id').value

が返されますが、 属性値であるが2147483648必要です。rId2r:id

私はそのattribute_with_ns(name, namespace)方法を見つけましたが

doc.xpath('p:presentation/p:sldMasterIdLst/p:sldMasterId').attribute_with_ns('id', 'r')

nilを返します。

4

2 に答える 2

2

要素の名前空間を参照するのと同じ方法で、xpath内の属性の名前空間を参照できます。

doc.xpath('p:presentation/p:sldMasterIdLst/p:sldMasterId/@r:id')

を使用する場合は、プレフィックスだけでなく、実際の名前空間attribute_with_nsを使用する必要があります。

doc.at_xpath('p:presentation/p:sldMasterIdLst/p:sldMasterId')
  .attribute_with_ns('id', "http://schemas.openxmlformats.org/officeDocument/2006/relationships")
于 2012-12-26T14:01:10.527 に答える