我正在尝试使用XML值更改单词ml schema的属性值。
...
<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 :(得分:1)
我尝试了转换,结果很好(即descr属性的值来自Assessment.xml)。你确定addFromString方法成功吗?它返回一个bool值来表示结果。它是否可能失败,因为存档中已存在word / document.xml且无法覆盖(即您需要先将其删除)?
答案 1 :(得分:0)
好的,我上面的代码显然工作正常。问题出在Word 2007缓存图像上。我能够更新word / media文件夹中的文件,以便在那里显示正确的图像,但是当查看word文档本身时,仍然会显示缓存的图像。
如果您遇到同样的问题,我已经创建了一个后续问题here。
感谢您的帮助!