2012-01-25 48 views
0

我试图用XML值更改单词ml架构的属性的值。WordML更新属性内联

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

我想,像这样的XML值改变DESCR值...

... 
<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文档模板中的现有图像。

由于 约翰

+0

John,''很好,如果你没有得到你想要的属性值那么路径不起作用,为了帮助您选择正确的路径,您需要在XSLT中显示XML代码和上下文节点的示例。 –

+0

谢谢Martin,我已经用更多信息更新了我的问题。不知道它是否与我用作模板的Word文档或如果我错过了其他东西。再次感谢。 – johnnycanehdian

+0

@johnnycanehdian:您的XSLT处理器存在问题。随着撒克逊6.5。4当我应用你的转换时,我得到了一个很好看的结果,其中包含了'的东西。 –

回答

1

我试图转变,结果是细(即从Assessment.xml截取的DESCR属性的值)。你确定addFromString方法成功吗?它返回一个布尔值来表示结果。是否有可能因为文档中已存在word/document.xml而无法覆盖(即,您需要先将其删除)?

+0

感谢您的回复。我假设addFromString的作品,因为所有其他的价值更新正确。这只是不能被替换的图像。我尝试从模板中删除单词/ document.xml,但具有相同的结果。 – johnnycanehdian

0

好的,所以我上面的代码正常工作正常。问题在于Word 2007缓存图像。我可以更新word/media文件夹中的文件,以便正确显示图像,但是当查看Word文档本身时,缓存的图像仍在显示。

如果您遇到同样的问题,我已经创建了后续问题here

感谢您的帮助!