我們的學生信息系統(Synergy)允許我們在MS Word中創建郵件合併文檔以替換現有報告。爲此我試圖替換報表生成以下(簡化)XML:在MS Word中使用XPath從特定節點選擇屬性
<REV_REPORT>
<REV_HEADER>
<NAME>Student Schedule List</NAME>
<NUMBER>STU415</NUMBER>
<ORGANIZATION>My Fine High School</ORGANIZATION>
<YEAR_TITLE>2016-2017</YEAR_TITLE>
</REV_HEADER>
<REV_DATA_ROOT>
<Student Grade="12" StudentName="Smith, John J." >
<StudentSchoolYear OrganizationName="My Fine High School">
<StudentClass PeriodBegin="1" RoomName="202-B" TeacherFormattedName="Able, J." />
<StudentClass PeriodBegin="2" RoomName="STD1-B" TeacherFormattedName="Baker, M." />
<StudentClass PeriodBegin="4" RoomName="614-H3" TeacherFormattedName="Channing, B." />
<StudentClass PeriodBegin="5" RoomName="BAND1-A" TeacherFormattedName="Donner, T." />
<StudentClass PeriodBegin="6" RoomName="805-H4" TeacherFormattedName="Enfield, K." />
<StudentClass PeriodBegin="7" RoomName="205-H1" TeacherFormattedName="Gonzalez, A." />
</StudentSchoolYear>
</Student>
</REV_DATA_ROOT>
</REV_REPORT>
正如你所看到的,學生有時間3,8免費的,XML沒有給出一個節點任何一個時期。我想生成該XML的東西,看起來像這樣:
Student Name Gr P1 P2 P3 P4 P5 P6 P7 P8
Smith, John J. 12 Able, J. Baker, M. Channing, B. Donner, T. Enfield, K. Gonzalez, A.
202-B STD1-B 614-H3 BAND1-A 805-H4 205-H1
最終的輸出應該有一個時段列空白,如果學生沒有課的那段時間。
在Word文檔中,我創建了一個帶有靜態標題行的表。的開始和表格的結束MERGEFIELD命令有:
{MERGEFIELD TableStart:REV_DATA_ROOT/Student \* MERGEFORMAT }
和
{MERGEFIELD TableEnd:REV_DATA_ROOT/Student \* MERGEFORMAT }
和被放置在所述第二行的第一個和最後的細胞。我可以在沒有任何問題的情況下獲得打印的名稱和等級。我能得到老師和房間號打印,如果我告訴它選擇一個特定的位置,即:
{MERGEFIELD StudentSchoolYear/StudentClass[1]/@TeacherFormattedname \* MERGEFORMAT }
{MERGEFIELD StudentSchoolYear/StudentClass[1]/@RoomNumber \* MERGEFORMAT }
不幸的是,如果我這樣做,對於每個時段(更新數以匹配我想要的週期數) ,該學生將在P4打印P4在列P3,P5等
這裏Stack Overflow另外一個問題使我試試這個:
{MERGEFIELD (StudentSchoolYear/StudentClass[@PeriodBegin=’1’])[1]/@TeacherFormattedName \* MERGEFORMAT }
{MERGEFIELD (StudentSchoolYear/StudentClass[@PeriodBegin=’1’])[1]/@RoomNumber \* MERGEFORMAT }
這給出瞭如下錯誤:
Error: '(StudentSchoolYear/StudentClass[@PeriodBegin=’1’])' has an invalid token.
我的問題:我試圖做的太複雜的Word的郵件合併引擎,或者是否有一個語法錯誤,我沒有看到?
這解決了這個錯誤。我不知道那些討厭的智能引用來自哪裏,因爲我通常在Text Wrangler中輸入表達式,然後將其複製並粘貼到字段中。謝謝! –