Обновление атрибутов WordML - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь изменить значение атрибута схемы ml со значением XML.

...
<wp:docPr id="3" name="Picture 3" descr="http://pathtoimage.png"/>
...

Я бы хотел изменить значение descr на значение XML следующим образом ...

...
<wp:docPr id="3" name="Picture 3" descr="<xsl:value-of select='Assessment/Scorecard/Graph0' />" />
...

Но это не работает. Ему не нравится встроенное значение xsl. Я тоже пробовал это ...

...
<wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}" />
...

Это не вызывает никаких ошибок, но также не работает.

Есть ли другой метод для изменения значения, встроенного в значение XML?

Обновление с более подробной информацией ...

XML

<?xml version="1.0" encoding="utf-8"?>
<Assessment>
<Title>
    <CompanyName>Company Name</CompanyName>
    <ReportDate>January 25th, 2012</ReportDate>
    <Address>
        <Line>Line 1</Line>
    </Address>
    <Address>
        <Line>Line 2</Line>
    </Address>
    <Address>
        <Line>Line 3</Line>
    </Address>
    <Address>
        <Line>Line 4</Line>
    </Address>
</Title>

<Scorecard>
    <SuppliesAndServiceLogistics>5.2</SuppliesAndServiceLogistics>
    <PrintingHardwareUsage>5.3</PrintingHardwareUsage>
    <TechnologyReliabilityAndUserProductivity>4.2</TechnologyReliabilityAndUserProductivity>
    <EnvironmentalImpact>3.0</EnvironmentalImpact>
    <Expense>1.8</Expense>
    <Graph0>http://path_to_image/Graph0.png</Graph0>
    <Savings>$43,526</Savings>
</Scorecard>
...
</Assessment>

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<w:document
  xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:o="urn:schemas-microsoft-com:office:office" 
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 
  xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" 
  xmlns:v="urn:schemas-microsoft-com:vml" 
  xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" 
  xmlns:w10="urn:schemas-microsoft-com:office:word" 
  xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" 
  xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">

  <w:body>
  ...

    <w:p w:rsidR="0057097D" w:rsidRDefault="0057097D">
      <w:pPr>
        <w:jc w:val="center"/>
        <w:rPr>
          <w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/>
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial"/>
          <w:noProof/>
        </w:rPr>
        <w:drawing>
          <wp:inline distT="0" distB="0" distL="0" distR="0">
            <wp:extent cx="5709285" cy="1524000"/>
            <wp:effectExtent l="19050" t="0" r="5715" b="0"/>
            <wp:docPr id="3" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/>
            <wp:cNvGraphicFramePr>
              <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/>
            </wp:cNvGraphicFramePr>
            <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
              <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
                <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
                  <pic:nvPicPr>
                    <pic:cNvPr id="0" name="Picture 3" descr="{Assessment/Scorecard/Graph0}"/>
                    <pic:cNvPicPr>
                      <a:picLocks noChangeAspect="1" noChangeArrowheads="1"/>
                    </pic:cNvPicPr>
                  </pic:nvPicPr>
                  <pic:blipFill>
                    <a:blip r:embed="rId9" r:link="rId10" cstate="print"/>
                    <a:srcRect/>
                    <a:stretch>
                      <a:fillRect/>
                    </a:stretch>
                  </pic:blipFill>
                  <pic:spPr bwMode="auto">
                    <a:xfrm>
                      <a:off x="0" y="0"/>
                      <a:ext cx="5709285" cy="1524000"/>
                    </a:xfrm>
                    <a:prstGeom prst="rect">
                      <a:avLst/>
                    </a:prstGeom>
                    <a:noFill/>
                    <a:ln w="9525">
                      <a:noFill/>
                      <a:miter lim="800000"/>
                      <a:headEnd/>
                      <a:tailEnd/>
                    </a:ln>
                  </pic:spPr>
                </pic:pic>
              </a:graphicData>
            </a:graphic>
          </wp:inline>
        </w:drawing>
      </w:r>
    </w:p>

  ...

  </w:body>

</w:document>

PHP

...
$xmlDataFile = ("Assessment.xml");
$xsltFile = ("Assessment.xslt");
$sourceTemplate = ("AssessmentTemplate.docx");
$outputDocument = ("Assessment.docx");

//Load the xml data and xslt and perform the transformation.
$xmlDocument = new DOMDocument();
$xmlDocument->load($xmlDataFile);

$xsltDocument = new DOMDocument();
$xsltDocument->load($xsltFile);

$xsltProcessor = new XSLTProcessor();
$xsltProcessor->importStylesheet($xsltDocument);

//After the transformation, $newContentNew contains 
//the XML data in the Open XML Wordprocessing format.
$newContent =  $xsltProcessor->transformToXML($xmlDocument);

//Copy the Word 2007 template document to the output file.
if (copy($sourceTemplate, $outputDocument)) {
    //Open XML files are packaged following the Open Packaging 
    //Conventions and can be treated as zip files when 
    //accessing their content.
    $zipArchive = new ZipArchive();
    $zipArchive->open($outputDocument);

    //Replace the content with the new content created above.
    //In the Open XML Wordprocessing format content is stored
    //in the document.xml file located in the word directory.
    $zipArchive->addFromString("word/document.xml", $newContent);
    $zipArchive->close();
}

По какой-то причине он не меняет изображение в сгенерированном документе. Используется существующее изображение в шаблоне документа Word.

Спасибо John

Ответы [ 2 ]

1 голос
/ 26 января 2012

Я попытался преобразование, и результат был в порядке (то есть значение атрибута descr было взято из Assessment.xml). Вы уверены, что метод addFromString успешен? Возвращает значение bool для указания результата. Может ли произойти сбой, потому что в архиве уже существует файл word / document.xml, и его нельзя перезаписать (т. Е. Сначала нужно удалить его)?

0 голосов
/ 27 января 2012

Хорошо, очевидно, мой код выше работает нормально. Проблема связана с кэшированием изображений в Word 2007. Я могу обновить файлы в папке word / media, чтобы там были правильные изображения, но при просмотре самого документа word кэшированное изображение все еще отображается.

Я создал дополнительный вопрос здесь , если у вас возникла такая же проблема.

Спасибо за вашу помощь!

...