Streaming through ListOutputParser or XMLOutputParser silently yields nothing when message chunks contain list content (content blocks), while invoke() on the same content parses correctly. This affects Anthropic chat models and causes silent data loss.
Origin Analysis
Both parsers guard streaming with `isinstance(message.content, str)` and skip non-string content. Content blocks (list of dicts) are non-string, so all text is dropped. The non-streaming path extracts text via `message.text`, which handles content blocks; the streaming path should use the same extraction.
Run the provided example:
```python
from langchain_core.messages import AIMessage, AIMessageChunk
from langchain_core.output_parsers import CommaSeparatedListOutputParser
parser = CommaSeparatedListOutputParser()
message = AIMessage(content=[{"type": "text", "text": "red, green, blue"}])
print("invoke: ", parser.invoke(message))
chunks = [
AIMessageChunk(content=[{"type": "text", "text": "red, gre", "index": 0}]),
AIMessageChunk(content=[{"type": "text", "text": "en, blue", "index": 0}]),
]
print("transform:", list(parser.transform(iter(chunks))))
```
Expected: transform yields [['red'], ['green'], ['blue']], but actual is [].
Also reproducible with XMLOutputParser and Anthropic streaming content blocks.