2
내가하고있는 일은 Microsoft Office Word 문서 XML의 값을 변경하여 새 파일로 저장하려고하는 것입니다. 나는 이것을 쉽게 할 수있는 SDK가 있다는 것을 알고 있지만, 유지 관리를 맡은 프로젝트는 이런 식으로 일을하고 있으며, 내가해야한다고 들었다. 나는 내 테스트 프로젝트에서 Word 문서 XML 변경하기
<root>
<element>
Fubar
</element>
<second>
This is the second placeholder
</second>
</root>
다음 한
:string strRelRoot = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
//the word template
byte[] buffer = File.ReadAllBytes("dev.docx");
MemoryStream stream = new MemoryStream(buffer, true);
Package package = Package.Open(stream, FileMode.Open, FileAccess.ReadWrite);
//get the document relationship
PackageRelationshipCollection pkgrcOfficeDocument = package.GetRelationshipsByType(strRelRoot);
//iterate through relationship
foreach (PackageRelationship pkgr in pkgrcOfficeDocument)
{
if (pkgr.SourceUri.OriginalString == "/")
{
//uri for the custom xml
Uri uriData = new Uri("/customXML/item1.xml", UriKind.Relative);
//delete the existing xml if it exists
if (package.PartExists(uriData))
{
// Delete template "/customXML/item1.xml" part
package.DeletePart(uriData);
}
PackagePart pkgprtData = package.CreatePart(uriData, "application/xml");
//hard coded test data
string xml = @"<root>
<element>
Changed
</element>
<second>
The second placeholder changed
</second>
</root>";
Stream fromStream = pkgprtData.GetStream();
//write the string
fromStream.Write(Encoding.UTF8.GetBytes(xml),0,xml.Length);
//destination file
Stream dest = File.Create("test.docx");
//write to the destination file
for (int a = fromStream.ReadByte(); a != -1; a = fromStream.ReadByte())
{
dest.WriteByte((byte)a);
}
}
}
은 무엇 지금 일어나고있는 것은 파일입니다
나는 다음과 같은 XML 매핑이 개 자리에 기본적인 테스트 문서가 test.docx가 생성되고 있지만 빈 문서입니다. 왜 이런 일이 일어나고 있는지 모르겠습니다. 누군가가이 접근법에서 제공 할 수있는 제안 및/또는 내가 잘못하고있는 것에 대한 제안은 대단히 감사하겠습니다. 감사합니다!
답장을 보내 주셔서 감사합니다. 포인터를 재설정해야한다고 잘못 생각했습니다. 내 코드와 목표를 약간 수정하고 수정 사항을 게시했습니다. 감사하게 생각한다면 감사하겠습니다! – TheMethod
@TheMethod 이는 목표에 상당히 중요한 수정 사항입니다. 간단히 말해, XML을 포함하는 부분을 삭제하기 전에 원본 XML을 읽은 다음 XML API 중 하나를 사용하여 작성하기 전에 원하는 값을 대체해야합니다 다시. 역사를 보지 못한 사람이이 질문을 이해하는 것을 불가능하게하려면 편집을 롤백하고 새로운 질문을하는 것이 좋습니다. – shambulator