سؤال

أنا حاليا باستخدام POI لمحاولة استخراج النص من مجموعة من مستندات Word، ويجب أن أكون قادرا على تحديد الإدخالات التي تحتوي المستند عليها. لقد تمكنت من الحصول على جذر المستند واسحب الإدخال الأول ولكن أريد أن أكون قادرا على عرض جميع الإدخالات. ال getEntries() يبدو أن الطريقة توفر هذه الوظيفة ولكني بخسارة حول كيفية استخدامها getViewableIterator() لسحبها.

أدناه هو ما لدي كود-الحكمة:

<cfset myFile = createObject("java", "java.io.FileInputStream").init(fileInputPath)>
<cfset fileSystem = CreateObject( "java", "org.apache.poi.poifs.filesystem.POIFSFileSystem" ).Init(myFile)>

<cfloop from="1" to="#fileSystem.getRoot().getEntryCount()#" index="i">
     <cfset viewableIterator = fileSystem.getRoot().getEntries().next().getViewableIterator()>
     <cfset nextEntry = fileSystem.getRoot().getEntries().next()>
     <cfif viewableIterator.hasNext()>
         <cfdump var="#nextEntry.getShortDescription()#">
         <cfset viewableIterator.remove()>
     </cfif>
</cfloop>

على الحلقة الأولى، أنا قادر على الحصول على أول دخول على ما يرام. ومع ذلك، أحصل على java.lang.IllegalStateException خطأ في أقرب وقت remove() يتم تنفيذ. من الواضح أنني لا أستخدم remove() الطريقة بشكل صحيح، لكنني لم أتمكن من العثور على أي أمثلة على كيفية استخدام هذا بشكل صحيح. سيتم تقدير أي مساعدة إلى حد كبير.

هل كانت مفيدة؟

المحلول

لا أفهم حقا علامات XML الخاصة بك (عادة ما أستخدم جافا في شكلها الطبيعي، مع الأقواس المجعد والأشياء)، ولكن عموما يعمل جهاز ikerator على ما يلي:

while(iterator.hasNext()) {
  x = iterator.next(); // get element
  // do with x what you want
  if (/*you want to remove x from the underlying list*/)
      iterator.remove();
}

في الممارسة العملية، يتم استخدام إزالة فقط نادرا جدا، في الحالات التي تريد الذهاب إليها من خلال مجموعة وإزالة كل ما تحتاجه لفترة أطول منه. يمكن أن تفشل إزالة إذا كان الانتعاش كائن أو إذا كنت تحاول التكرار فوقه مرتين مع اثنين من المحامين المختلفة في نفس الوقت. فقط العصا مع hasnext والآخر.

نصائح أخرى

كتب بن نادل من حلول كينكي مكون قد يتعامل مع وضعك. اعطاء نظرة انظر وتقديم تقرير إذا ساعدك مشروعه.

POI فائدة coldfusion مكون

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top